免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1384 | 回复: 0
打印 上一主题 下一主题

使用隐藏的new来创建对象 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-23 12:48 |只看该作者 |倒序浏览
转:Snandy

使用隐藏的new来创建对象






JQ中发现的,jQuery.Event类。估计作者是为了减少代码量。定义一个类,但不用new关键字去创建该类对象,而使用方法调用()方式去创建该对象。

很多时候我们是这样写类,然后使用new创建对象的。
  1. 1 function Person(name,age){  

  2. 2     this.name=name;  

  3. 3     this.age=age;  

  4. 4 }  

  5. 5 Person.prototype={  

  6. 6     setName : function(n){this.name=n;},  

  7. 7     getName : function(){return this.name;}  

  8. 8 }  

  9. 9 var p = new Person('jack',25);
复制代码
改成这样的
  1. 01 function Person(name,age){  

  2. 02    //条件改为(this==window)或(this==self)或(this.constructor!=Object)  

  3. 03     if(!this.setName){  

  4. 04        return new Person(name,age);  

  5. 05     }  

  6. 06     this.name=name;  

  7. 07     this.age=age;  

  8. 08 }  

  9. 09 Person.prototype={  

  10. 10     setName : function(n){this.name=n;},  

  11. 11     getName : function(){return this.name;}  

  12. 12 }  

  13. 13 var p = Person('jack',25);
复制代码
注意该类较最上面的写类方式中多了以下
  1. 1 if(!this.setName){  

  2. 2     return new Person(name,age);  

  3. 3 }
复制代码
好,创建类的实例(对象)方式也变成了如下
  1. 1 var p = Person('jack',25);
复制代码
这种创建方式(函数调用)较上面的少了“new_”,new和空格,实际上是在类内部new了。而这样方式每次创建对象可以减少4个byte。
如果把类内部的if判断条件换成非prototype上的属性,如this.name。程序会提示出错:too much recursion
  1. 01 function Person(name,age){  

  2. 02     if(!this.name){  

  3. 03        return new Person(name,age);  

  4. 04     }  

  5. 05     this.name=name;  

  6. 06     this.age=age;  

  7. 07 }  

  8. 08 Person.prototype={  

  9. 09     setName : function(n){this.name=n;},  

  10. 10     getName : function(){return this.name;}  

  11. 11 }  

  12. 12 var p = Person('jack',25);
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP