使用隐藏的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小技巧
Mar 01 Javascript
JS Jquery 遍历,筛选页面元素 自动完成(实现代码)
Jul 08 Javascript
js中浮点型运算BUG的解决方法说明
Jan 06 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
Feb 26 Javascript
Javascript原型链的原理详解
Jan 05 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
Sep 16 Javascript
JS组件系列之MVVM组件 vue 30分钟搞定前端增删改查
Apr 28 Javascript
Node学习记录之cluster模块
May 31 Javascript
详解vue.js根据不同环境(正式、测试)打包到不同目录
Jul 13 Javascript
JavaScript中call和apply方法的区别实例分析
Aug 03 Javascript
Vue实现table上下移动功能示例
Feb 21 Javascript
layui自己添加图片按钮并点击跳转页面的例子
Sep 14 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新手上路(十)
2006/10/09 PHP
php程序效率优化的一些策略小结
2010/07/17 PHP
PHP编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
10条php编程小技巧
2015/07/07 PHP
php实现smarty模板无限极分类的方法
2015/12/07 PHP
javascript contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2010/02/04 Javascript
javascript 节点遍历函数
2010/03/28 Javascript
3分钟写出来的Jquery版checkbox全选反选功能
2013/10/23 Javascript
JS判断两个时间大小的示例代码
2014/01/28 Javascript
JavaScript表单通过正则表达式验证电话号码
2014/03/14 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
2015/01/13 Javascript
js实现文字垂直滚动和鼠标悬停效果
2015/12/31 Javascript
javascript实现抽奖程序的简单实例
2016/06/07 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
使用vue官方提供的模板vue-cli搭建一个helloWorld案例分析
2018/01/16 Javascript
以v-model与promise两种方式实现vue弹窗组件
2018/05/21 Javascript
详解angular2.x创建项目入门指令
2018/10/11 Javascript
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
在小程序中推送模板消息的实现方法
2019/07/22 Javascript
JQuery Ajax如何实现注册检测用户名
2020/09/25 jQuery
详解JavaScript中分解数字的三种方法
2021/01/05 Javascript
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
python调用系统ffmpeg实现视频截图、http发送
2018/03/06 Python
python3.5绘制随机漫步图
2018/08/27 Python
pyqt5 删除layout中的所有widget方法
2019/06/25 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
Windows下实现将Pascal VOC转化为TFRecords
2020/02/17 Python
python3中编码获取网页的实例方法
2020/11/16 Python
写好求职信第一句话的技巧
2013/10/26 职场文书
爱情保证书范文
2014/02/01 职场文书
职工运动会感言
2014/02/07 职场文书
奉献爱心演讲稿
2014/09/04 职场文书
公司授权委托书样本
2014/09/15 职场文书
六五普法心得体会2016
2016/01/21 职场文书