zl程序教程

您现在的位置是:首页 >  其它

当前栏目

使用隐藏的new来创建对象

使用 隐藏 New 创建对象
2023-06-13 09:14:27 时间
很多时候我们是这样写类,然后使用new创建对象的。
复制代码代码如下:

functionPerson(name,age){
this.name=name;
this.age=age;
}
Person.prototype={
setName:function(n){this.name=n;},
getName:function(){returnthis.name;}
}
varp=newPerson("jack",25);

改成这样的
复制代码代码如下:

functionPerson(name,age){
//条件改为(this==window)或(this==self)或(this.constructor!=Object)
if(!this.setName){
returnnewPerson(name,age);
}
this.name=name;
this.age=age;
}
Person.prototype={
setName:function(n){this.name=n;},
getName:function(){returnthis.name;}
}
varp=Person("jack",25);

注意该类较最上面的写类方式中多了以下
复制代码代码如下:
if(!this.setName){
returnnewPerson(name,age);
}

好,创建类的实例(对象)方式也变成了如下
复制代码代码如下:
varp=Person("jack",25);

这种创建方式(函数调用)较上面的少了“new_”,new和空格,实际上是在类内部new了。而这样方式每次创建对象可以减少4个byte。
如果把类内部的if判断条件换成非prototype上的属性,如this.name。程序会提示出错:toomuchrecursion
复制代码代码如下:
functionPerson(name,age){
if(!this.name){
returnnewPerson(name,age);
}
this.name=name;
this.age=age;
}
Person.prototype={
setName:function(n){this.name=n;},
getName:function(){returnthis.name;}
}
varp=Person("jack",25);