首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

JavaScript语言基础(5) 自定义对象

2012-09-19 
JavaScript语言基础(五) 自定义对象一、对象创建方式?格式:objectName??{property1:value1,?property2:val

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>
?

?

?

热点排行