使用隐藏的new来创建对象


Posted in Javascript onMarch 29, 2011

很多时候我们是这样写类,然后使用new创建对象的。

function Person(name,age){ 
this.name=name; 
this.age=age; 
} 
Person.prototype={ 
setName : function(n){this.name=n;}, 
getName : function(){return this.name;} 
} 
var p = new Person('jack',25);

改成这样的
function Person(name,age){ 
//条件改为(this==window)或(this==self)或(this.constructor!=Object) 
if(!this.setName){ 
return new Person(name,age); 
} 
this.name=name; 
this.age=age; 
} 
Person.prototype={ 
setName : function(n){this.name=n;}, 
getName : function(){return this.name;} 
} 
var p = Person('jack',25);

注意该类较最上面的写类方式中多了以下
if(!this.setName){ 
return new Person(name,age); 
}

好,创建类的实例(对象)方式也变成了如下
var p = Person('jack',25);

这种创建方式(函数调用)较上面的少了“new_”,new和空格,实际上是在类内部new了。而这样方式每次创建对象可以减少4个byte。
如果把类内部的if判断条件换成非prototype上的属性,如this.name。程序会提示出错:too much recursion
function Person(name,age){ 
if(!this.name){ 
return new Person(name,age); 
} 
this.name=name; 
this.age=age; 
} 
Person.prototype={ 
setName : function(n){this.name=n;}, 
getName : function(){return this.name;} 
} 
var p = Person('jack',25);
Javascript 相关文章推荐
jValidate 基于jQuery的表单验证插件
Dec 12 Javascript
YUI模块开发原理详解
Nov 18 Javascript
学习AngularJs:Directive指令用法(完整版)
Apr 26 Javascript
jQuery中select与datalist制作下拉菜单时的区别浅析
Dec 30 Javascript
js仿微信公众平台打标签功能
Apr 08 Javascript
iOS + node.js使用Socket.IO框架进行实时通信示例
Apr 14 Javascript
JavaScript箭头函数_动力节点Java学院整理
Jun 28 Javascript
基于JavaScript实现飘落星星特效
Aug 10 Javascript
Three.js基础学习教程
Nov 16 Javascript
vue系列之requireJs中引入vue-router的方法
Jul 18 Javascript
小程序开发中如何使用async-await并封装公共异步请求的方法
Jan 20 Javascript
vue-cli打包后本地运行dist文件中的index.html操作
Aug 12 Javascript
myeclipse安装jQuery插件的方法
Mar 29 #Javascript
分享27款非常棒的jQuery 表单插件
Mar 28 #Javascript
基于jQuery的动态表格插件
Mar 28 #Javascript
模拟jQuery ajax服务器端与客户端通信的代码
Mar 28 #Javascript
原来Jquery.load的方法可以一直load下去
Mar 28 #Javascript
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
Mar 28 #Javascript
jquery向.ashx文件post中文乱码问题的解决方法
Mar 28 #Javascript
You might like
php实现图片缩放功能类
2013/12/18 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
2014/07/05 PHP
yii2中使用Active Record模式的方法
2016/01/09 PHP
php获取当前url地址的方法小结
2017/01/10 PHP
php使用curl获取header检测开启GZip压缩的方法
2018/08/15 PHP
javascript高亮效果的二种实现方法
2008/09/14 Javascript
JQuery 实现的页面滚动时浮动窗口控件
2009/07/10 Javascript
javascript控制swfObject应用介绍
2012/11/29 Javascript
js类式继承的具体实现方法
2013/12/31 Javascript
Thinkphp模板没有解析直接原样输出的解决方法
2014/10/31 Javascript
javascript中String对象的slice()方法分析
2014/12/20 Javascript
jQuery中not()方法用法实例
2015/01/06 Javascript
javascript如何实现暂停功能
2015/11/06 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
2016/06/25 Javascript
js return返回多个值,通过对象的属性访问方法
2017/02/21 Javascript
vue-resource拦截器设置头信息的实例
2017/10/27 Javascript
socket io与vue-cli的结合使用的示例代码
2018/11/01 Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
2018/12/10 jQuery
JS数组Object.keys()方法的使用示例
2019/06/05 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
Python判断列表是否已排序的各种方法及其性能分析
2016/06/20 Python
简述:我为什么选择Python而不是Matlab和R语言
2017/11/14 Python
有影响力的品牌之家:Our Social Collective
2019/06/08 全球购物
俄罗斯名牌服装网上商店:UNIQUE FABRIC
2019/07/25 全球购物
New Balance比利时官方网站:购买鞋子和服装
2021/01/15 全球购物
澳大利亚香水在线商店:City Perfume
2020/09/02 全球购物
采购内勤岗位职责
2013/12/10 职场文书
求职信的要素有哪些呢
2013/12/26 职场文书
优质护理服务演讲稿
2014/05/07 职场文书
专科应届毕业生求职信
2014/06/04 职场文书
民政局离婚协议书范本
2014/10/20 职场文书
平遥古城导游词
2015/02/03 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书
党支部考察鉴定意见
2015/06/02 职场文书
python基础之爬虫入门
2021/05/10 Python
如何开发一个渐进式Web应用程序PWA
2021/05/10 Javascript