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

一、对象创建方式 

1) 对象初始化器方式

格式: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 οnlοad="test()"></body>
</html>
 

2) 函数方式

包含的方式比较多,流行的是构造函数/原型方式 ,当然也可看看jquery和extjs的源码看看别人都再用什么样的方式。

a. 工厂方式;

b. 构造函数方法;

c. 原型方式;

d. 混合的构造函数/原型方式;

e. 动态原型方法;

f. 混合工厂方式;

举一个简单例子

<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 οnlοad="test()"></body>
</html>
 

详细可参看http://www.cnblogs.com/QiuYun/archive/2007/03/22/684523.html 

 

二、对象的属性

 

JS中可以为对象定义三种类型的属性:私有属性、实例属性和类属性,与Java类似,私有属性只能在对象内部使用,实例属性必须通过对象的实例进行引用,而类属性可以直接通过类名进行引用。

1) 私有属性定义
私有属性只能在构造函数内部定义与使用。
语法格式:var propertyName=value
例如:

function User(age){
           this.age=age;
           var isChild=age<12;
           this.isLittleChild=isChild;
}
var user=new User(15);
alert(user.isLittleChild);//正确的方式
alert(user.isChild);//报错:对象不支持此属性或方法
 

 

2) 实例属性定义,也存在两种方式:
prototype方式,语法格式:functionName.prototype.propertyName=value
this方式,语法格式:this.propertyName=value,注意后面例子中this使用的位置
上面中value可以是字符创、数字和对象。

3) 类属性定义
语法格式:functionName.propertyName=value

例如:

function User(){ }
User.MAX_AGE=200;
User.MIN_AGE=0;
alert(User.MAX_AGE);

 

4) 对于属性的定义,除了上面较为正规的方式外,还有一种非常特别的定义方式,

    语法格式: obj[index]=value

    例如:

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方式定义的,必须以正常方式引用 

 

三、属性与方法的动态增加和删除

1) 对于已经实例化的对象,我们可以动态增加和删除它的属性与方法,语法如下(假定对象实例为obj):
动态增加对象属性
obj.newPropertyName=value;
动态增加对象方法
    obj.newMethodName=method或者=function(arg1,,argN){}
动态删除对象属性
    delete obj.propertyName
动态删除对象方法
    delete obj.methodName  

例如

 

<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);//显示undefined
test2();
}
function test2() {
var user = new User1("name2");
alert(user.getName());
}
</script>
</head>
<body οnlοad="test()"></body>
</html>
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值