使用隐藏的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 相关文章推荐
使用Modello编写JavaScript类
Dec 22 Javascript
浅谈JavaScript 框架分类
Nov 10 Javascript
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 Javascript
正则表达式(语法篇推荐)
Jun 24 Javascript
JS实现的多张图片轮流播放幻灯片效果
Jul 22 Javascript
前端设计师们最常用的JS代码汇总
Sep 25 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
Mar 17 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
Jun 04 Javascript
详解Node全局变量global模块
Sep 28 Javascript
三步实现ionic3点击退出app程序
Sep 17 Javascript
实现一个Vue自定义指令懒加载的方法示例
Jun 04 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
Sep 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
Yii2 rbac权限控制之菜单menu实例教程
2016/04/28 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
2017/07/27 PHP
PHP获取数组中指定的一列实例
2017/12/27 PHP
JavaScript 参考教程
2006/12/29 Javascript
json跟xml的对比分析
2008/06/10 Javascript
关于jQuery object and DOM element
2013/04/15 Javascript
js使用循环清空某个div中的input标签值
2014/09/29 Javascript
JavaScript常用基础知识强化学习
2015/12/09 Javascript
JavaScript设计模式经典之命令模式
2016/02/24 Javascript
JavaScript易错知识点整理
2016/12/05 Javascript
AngularJS 表单验证手机号的实例(非必填)
2017/11/12 Javascript
Node.js应用设置安全的沙箱环境
2018/04/23 Javascript
微信小程序scroll-view实现字幕滚动
2018/07/14 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
2019/01/06 Javascript
细述Javascript的加法运算符的具体使用
2019/10/18 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
[54:06]OG vs TNC 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
使用pandas对两个dataframe进行join的实例
2018/06/08 Python
python设置值及NaN值处理方法
2018/07/03 Python
python 实现将txt文件多行合并为一行并将中间的空格去掉方法
2018/12/20 Python
对python中return与yield的区别详解
2020/03/12 Python
Python如何将将模块分割成多个文件
2020/08/04 Python
如何使用 Flask 做一个评论系统
2020/11/27 Python
CSS3 Media Queries详细介绍和使用实例
2014/05/08 HTML / CSS
css3实现椭圆轨迹旋转的示例代码
2018/10/29 HTML / CSS
html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
2013/01/09 HTML / CSS
DERMAdoctor官网:美国著名皮肤护理品牌
2019/07/06 全球购物
计算机专业学生的自我评价
2013/12/15 职场文书
国贸专业大学生职业生涯规划范文
2014/01/10 职场文书
保证书格式范文
2014/04/28 职场文书
英语故事演讲稿
2014/04/29 职场文书
2014年学校领导班子对照检查材料
2014/09/19 职场文书
2014向国旗敬礼网上签名活动总结
2014/09/27 职场文书
2016年暑期教师培训心得体会
2016/01/09 职场文书
python 远程执行命令的详细代码
2022/02/15 Python
Python学习之迭代器详解
2022/04/01 Python