使用隐藏的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 相关文章推荐
Javascript 各浏览器的 Javascript 效率对比
Jan 23 Javascript
JS处理VBArray的函数使用说明
May 11 Javascript
Js 获取当前日期时间及其它操作实现代码
Mar 04 Javascript
HTML代码中标签的全部属性 中文注释说明
Mar 26 Javascript
js使用循环清空某个div中的input标签值
Sep 29 Javascript
JavaScript实现的简单拖拽效果
Jun 01 Javascript
深入学习JavaScript中的原型prototype
Aug 13 Javascript
jquery之别踩白块游戏的简单实现
Jul 25 Javascript
jQuery时间日期三级联动(推荐)
Nov 27 Javascript
微信分享调用jssdk实例
Jun 08 Javascript
bootstrap实现点击删除按钮弹出确认框的实例代码
Aug 16 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
Aug 25 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 错误之引号中使用变量
2009/05/04 PHP
php将数组转换成csv格式文件输出的方法
2015/03/14 PHP
Yii中表单用法实例详解
2016/01/05 PHP
PHP中Trait及其应用详解
2017/02/14 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
JavaScript Chart 插件整理
2010/06/18 Javascript
js下将字符串当函数执行的方法
2011/07/13 Javascript
一个页面放2段图片滚动代码出现冲突的问题如何解决
2012/12/21 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
jquery实现的table排序功能示例
2017/03/10 Javascript
利用Console来Debug的10个高级技巧汇总
2018/03/26 Javascript
学习Vue组件实例
2018/04/28 Javascript
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
基于Vue 实现一个中规中矩loading组件
2019/04/03 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
2019/08/27 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
2019/12/29 Javascript
Python压缩和解压缩zip文件
2015/02/14 Python
《Python之禅》中对于Python编程过程中的一些建议
2015/04/03 Python
解决python3 json数据包含中文的读写问题
2018/05/10 Python
python中退出多层循环的方法
2018/11/27 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
2019/05/23 Python
网易2016研发工程师编程题 奖学金(python)
2019/06/19 Python
如何通过雪花算法用Python实现一个简单的发号器
2019/07/03 Python
pytorch之inception_v3的实现案例
2020/01/06 Python
django中嵌套的try-except实例
2020/05/21 Python
python tqdm库的使用
2020/11/30 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
2021/01/09 Python
python+opencv实现车道线检测
2021/02/19 Python
国际象棋商店:The Chess Store
2018/07/09 全球购物
美国手机支架公司:PopSockets
2019/11/27 全球购物
继电保护工岗位职责
2014/01/05 职场文书
农民工工资承诺书范文
2014/03/31 职场文书
2015年设计师个人工作总结
2015/04/25 职场文书
幼师辞职信范文大全
2015/05/12 职场文书
围城读书笔记
2015/06/26 职场文书
Nginx代理同域名前后端分离项目的完整步骤
2021/03/31 Servers