使用隐藏的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 相关文章推荐
js表数据排序 sort table data
Feb 18 Javascript
jquery CSS选择器笔记
Mar 29 Javascript
用html+css+js实现的一个简单的图片切换特效
May 28 Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
Jun 07 Javascript
javascript表格的渲染组件
Jul 03 Javascript
JS鼠标拖拽实例分析
Nov 23 Javascript
jquery拖拽效果完整实例(附demo源码下载)
Jan 14 Javascript
JavaScript学习笔记之数组去重
Mar 23 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
Jul 22 Javascript
浅谈Javascript中的Label语句
Dec 14 Javascript
温故知新——JavaScript中的字符串连接问题最全总结(推荐)
Aug 21 Javascript
layui type2 通过url给iframe子页面传值的例子
Sep 06 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新手谈谈我的学习心得
2007/02/25 PHP
PHP文件读写操作之文件读取方法详解
2011/01/13 PHP
PHP If Else(elsefi) 语句
2013/04/07 PHP
PHP中可以自动分割查询字符的Parse_str函数使用示例
2014/07/25 PHP
php连接与操作PostgreSQL数据库的方法
2014/12/25 PHP
php使用Jpgraph绘制饼状图的方法
2015/06/10 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
2017/10/22 PHP
详解PHP版本兼容之openssl调用参数
2018/07/25 PHP
JavaScript While 循环基础教程
2007/04/05 Javascript
初学Javascript的一些总结
2008/11/03 Javascript
JavaScript 判断指定字符串是否为有效数字
2010/05/11 Javascript
onclick与listeners的执行先后问题详细解剖
2013/01/07 Javascript
javascript 按键事件(兼容各浏览器)
2013/12/20 Javascript
node.js中的console.log方法使用说明
2014/12/09 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
2015/09/19 Javascript
基于jQuery下拉选择框插件支持单选多选功能代码
2016/06/07 Javascript
jQuery网页定位导航特效实现方法
2016/12/19 Javascript
jQuery表格(Table)基本操作实例分析
2017/03/10 Javascript
详解vue.js根据不同环境(正式、测试)打包到不同目录
2018/07/13 Javascript
jQuery操作元素的内容和样式完整实例分析
2020/01/10 jQuery
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
vue下拉刷新组件的开发及slot的使用详解
2020/12/23 Vue.js
python中的对象拷贝示例 python引用传递
2014/01/23 Python
决策树的python实现方法
2014/11/18 Python
浅谈python中的占位符
2017/11/09 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
python统计字符的个数代码实例
2020/02/07 Python
西班牙语在线票务市场:SuperBoletería
2019/06/10 全球购物
两道JAVA笔试题
2016/09/14 面试题
支教自我鉴定
2014/01/18 职场文书
秋季运动会广播稿大全
2014/02/17 职场文书
导师推荐信范文
2014/05/09 职场文书
七一讲话心得体会
2014/09/05 职场文书
2015年维修工作总结
2015/04/25 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
2019年幼儿园管理条例范本!
2019/07/17 职场文书