使用隐藏的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 模拟JQuery的Ready方法实现并出现的问题
Dec 06 Javascript
异步javascript的原理和实现技巧介绍
Nov 08 Javascript
JS仿百度搜索自动提示框匹配查询功能
Nov 21 Javascript
如何从jQuery的ajax请求中删除X-Requested-With
Dec 11 Javascript
JavaScript中的setMilliseconds()方法使用详解
Jun 11 Javascript
JS验证IP,子网掩码,网关和MAC的方法
Jul 02 Javascript
javascript获取当前的时间戳的方法汇总
Jul 26 Javascript
Bootstrap实现默认导航栏效果
Sep 21 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
Dec 02 Javascript
微信小程序 小程序制作及动画(animation样式)详解
Jan 06 Javascript
详解webpack-dev-server使用方法
Sep 14 Javascript
javascript实现点击小图显示大图
Nov 29 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判断搜索引擎蜘蛛并自动记忆到文件的代码
2012/02/04 PHP
openflashchart 2.0 简单案例php版
2012/05/21 PHP
php将字符串转化成date存入数据库的两种方式
2014/04/28 PHP
Nigma vs Liquid BO3 第二场2.14
2021/03/10 DOTA
更正确的asp冒泡排序
2007/05/24 Javascript
避免 showModalDialog 弹出新窗体的原因分析
2010/05/31 Javascript
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
你必须知道的Javascript知识点之"单线程事件驱动"的使用
2013/04/23 Javascript
Jquery中offset()和position()的区别分析
2015/02/05 Javascript
基于jQuery+JSON的省市二三级联动效果
2015/06/05 Javascript
JavaScript File API文件上传预览
2016/02/02 Javascript
javascript实现数组去重的多种方法
2016/03/14 Javascript
微信小程序 数据封装,参数传值等经验分享
2017/01/09 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
Vue路由 重定向和别名的区别说明
2020/09/09 Javascript
[01:07:21]NAVI vs VG Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
使用python调用浏览器并打开一个网址的例子
2014/06/05 Python
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
2014/07/04 Python
Python实现抓取城市的PM2.5浓度和排名
2015/03/19 Python
PyQt 线程类 QThread使用详解
2017/07/16 Python
python使用threading获取线程函数返回值的实现方法
2017/11/15 Python
python判断数字是否是超级素数幂
2018/09/27 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
详解爬虫被封的问题
2019/04/23 Python
python获取磁盘号下盘符步骤详解
2019/06/19 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
2020/04/08 Python
Python 将 QQ 好友头像生成祝福语的实现代码
2020/05/03 Python
css3加js做一个简单的3D行星运转效果实例代码
2017/01/18 HTML / CSS
html5的画布canvas——画出弧线、旋转的图形实例代码+效果图
2013/06/09 HTML / CSS
eDreams巴西:廉价机票,酒店优惠和度假套餐
2017/04/14 全球购物
华为俄罗斯官方网上商城:购买Huawei手机和平板
2017/04/21 全球购物
小学生操行评语大全
2014/04/22 职场文书
机关党员公开承诺书
2014/08/30 职场文书
python生成可执行exe控制Microsip自动填写号码并拨打功能
2021/06/21 Python
Python干货实战之八音符酱小游戏全过程详解
2021/10/24 Python