使用隐藏的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 相关文章推荐
jquery中的sortable排序之后的保存状态的解决方法
Jan 28 Javascript
根据经纬度计算地球上两点之间的距离js实现代码
Mar 05 Javascript
Javascript实现页面跳转的几种方式分享
Oct 26 Javascript
jquery修改属性值实例代码(设置属性值)
Jan 06 Javascript
浅谈jQuery的offset()方法及示例分享
Jul 17 Javascript
AngularJS使用angular-formly进行表单验证
Dec 27 Javascript
JS动态创建元素的两种方法
Apr 20 Javascript
IONIC自定义subheader的最佳解决方案
Sep 22 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
Dec 02 Javascript
javascript 中Cookie读、写与删除操作
Mar 29 Javascript
基于element-ui组件手动实现单选和上传功能
Dec 06 Javascript
vue+element表格导出为Excel文件
Sep 26 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
在apache下限制每个虚拟主机的并发数!!!!
2006/10/09 PHP
PHP警告Cannot use a scalar value as an array的解决方法
2012/01/11 PHP
PHP 之Section与Cookie使用总结
2012/09/14 PHP
php数组删除元素示例
2014/03/21 PHP
Yii2实现让关联字段支持搜索功能的方法
2016/08/10 PHP
php中preg_replace正则替换用法分析【一次替换多个值】
2017/01/17 PHP
HR vs CL BO3 第一场 2.13
2021/03/10 DOTA
超清晰的document对象详解
2007/02/27 Javascript
js 异步处理进度条
2010/04/01 Javascript
仅IE不支持setTimeout/setInterval函数的第三个以上参数
2011/05/25 Javascript
JavaScript中两个感叹号的作用说明
2011/12/28 Javascript
利用谷歌地图API获取点与点的距离的js代码
2012/10/11 Javascript
javascript中typeof的使用示例
2013/12/19 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
2015/08/21 Javascript
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
Dropify.js图片宽高自适应的方法
2017/11/27 Javascript
p5.js入门教程之平滑过渡(Easing)
2018/03/16 Javascript
微信小程序模板template简单用法示例
2018/12/04 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
JS实现网页端猜数字小游戏
2020/03/06 Javascript
用JS实现选项卡
2020/03/23 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
浅谈使用Python变量时要避免的3个错误
2017/10/30 Python
mac安装pytorch及系统的numpy更新方法
2018/07/26 Python
Python使用pickle模块储存对象操作示例
2018/08/15 Python
Django命名URL和反向解析URL实现解析
2019/08/09 Python
python实现opencv+scoket网络实时图传
2020/03/20 Python
Python用dilb提取照片上人脸的示例
2020/10/26 Python
普通PHP程序员笔试题
2016/01/01 面试题
化学专业毕业生自荐信
2013/11/15 职场文书
中学校庆方案
2014/03/17 职场文书
歌唱比赛主持词
2014/03/18 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
React实现动效弹窗组件
2021/06/21 Javascript