Javascript对象定义方式的比较

1. 字面量形式

var obj1 = {
    name: "obj1",
    fuc: function () {
    alert("OK");
    }
};

优点:字面量形式与json对象类似,简单直观。
缺点:(1)代码不具备重用性,如果要创建一个具有相同成员的对象obj2,则需要将上述定义代码全部copy给obj2。(2)仅使用字面量方式,不能动态添加对象成员。

2.创建object实例

var obj2 = new Object();
obj2.name = "obj2",
obj2.fuc = function () {
    alert("OK");
};

优点:可以动态的为对象添加成员。
缺点:代码仍不具备重用性,即fuc函数仍仅为对象obj2所持有。

3.构造函数定义

function Obj3() {
    this.name = "obj3",
    this.fuc = function () {
        alert("OK");
    };
}

优点:对象成员name和fuc为类型Obj3的所有实例所共有,即每个定义的Obj3实例都至少包含name和fuc两个成员。
缺点:每定义一个对象实例,都会开辟一段空间用于保存成员name和fuc,而函数一般为所有实例所共享,只需要开辟一个空间即可,故构造函数方式造成了额外的内存开销。

4.原型方式

function Obj4() {

}
Obj4.prototype.name = "obj4",
Obj4.prototype.fuc = function () {
    alert("OK");
};

优点:所有对象实例共享一段内存空间,节省了空间开销,达到了Java中静态成员变量的效果。
缺点:对普通成员变量,即非函数的成员不建议使用,因为普通成员变量一般记录对应实例的特性,对原型中成员变量的更改会反映到每个实例中,因为每个实例都从同一块内存区中读取成员变量值。

错误的定义方式

Obj4.fuc = function () {
    alert("OK");
};

特别提醒:有Java或C#开发经历的朋友可能会误用此方式,这其实是不符合js语法的,如果调用fuc方法,会返回undefined错误,请牢记!

推荐的方式

function Obj4() {
    this.name = "obj3";
}
Obj4.prototype.fuc = function () {
    alert("OK");
};

朋友们在JS开发中,建议将普通成员变量定义在构造函数中,这样每个实例都会有自己的一个成员变量存储空间,保存特有的状态;在对象原型中定义成员函数,从而所有实例共享只占用一个内存区的函数。
笔者在武汉读研,第一次写博客呢,有表达不好的地方请前辈们多多批评指正,感谢支持!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值