JavaScript语言基础(五) 自定义对象
一、对象创建方式?
格式:objectName?=?{property1:value1,?property2:value2,…,?propertyN:valueN}?,可以想象为一个HashMap;这里其实是JSON数据类型
property是对象的属性
value则是对象的值,值可以是字符串、数字或对象三者之一
例如:?
?
<html><head><title>test</title><script type="text/javascript">function test() {var user = {name : "user1",age : 18,getName : function() {return this.name;}}alert(user.name);//直接取对象的属性值//或者用下面这样也可以取值alert(user['name']);alert(user.getName());//调用方法}</script></head><body onload="test()"></body></html>?
2)?函数方式
包含的方式比较多,流行的是构造函数/原型方式?,当然也可看看jquery和extjs的源码看看别人都再用什么样的方式。
举一个简单例子:
<html><head><title>test</title><script type="text/javascript">//定义对象User;采用“构造函数方法”function User1(name) {this.name = name;this.getName = function() {return this.name;}}//定义对象User2;采用“原型方式”function User2() {};User2.prototype.name ="hello world";User2.prototype.setName = function(name) {this.name = name;}User2.prototype.getName = function() {return this.name;}//测试function test() {//创建对象实例var user = new User1("name1");alert(user.name);alert(user.getName());var user2 = new User2();user2.setName("name2");alert(user2.name);alert(user2.getName());}</script></head><body onload="test()"></body></html>?
详细可参看http://www.cnblogs.com/QiuYun/archive/2007/03/22/684523.html?
?
二、对象的属性
?
JS中可以为对象定义三种类型的属性:私有属性、实例属性和类属性,与Java类似,私有属性只能在对象内部使用,实例属性必须通过对象的实例进行引用,而类属性可以直接通过类名进行引用。
function User(age){ this.age=age; var isChild=age<12; this.isLittleChild=isChild;}var user=new User(15);alert(user.isLittleChild);//正确的方式alert(user.isChild);//报错:对象不支持此属性或方法?
?
例如:
function User(){ }User.MAX_AGE=200;User.MIN_AGE=0;alert(User.MAX_AGE);
?
4)?对于属性的定义,除了上面较为正规的方式外,还有一种非常特别的定义方式,
function User(name){ this.name=name; this.age=18; this[1]=“ok”; this[200]=“year”;}var user=new User(“user1”);alert(user[1]);
? ? 在上面例子中,要注意:不同通过this[1]来获取age属性,也不能通过this[0]来获取name属性,即通过index方式定义的必须使用index方式来引用,而没有通过index方式定义的,必须以正常方式引用?
?
三、属性与方法的动态增加和删除
例如
?
<html><head><title>test</title><script type="text/javascript">//定义对象User;采用“构造函数方法”function User1(name) {this.name = name;this.getName = function() {return this.name;}}//测试function test() {//创建对象实例var user = new User1("name1");alert(user.getName());//动态添加新属性和方法user.age = 10;user.setAge = function(age){this.age = age;}user.getAge = function() {return this.age;}alert(user.getAge());delete user.name;delete user.getName;//当然出此作用域后动态添加的方法就没有了alert(user.name);//显示undefinedtest2();}function test2() {var user = new User1("name2");alert(user.getName());}</script></head><body onload="test()"></body></html>?
?
?