使用隐藏的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高级程序设计(第3版)学习笔记9 js函数(下)
Oct 11 Javascript
jquery iframe操作详细解析
Nov 20 Javascript
jquery实现的树形目录实例
Jun 26 Javascript
jQuery弹出层后禁用底部滚动条(移动端关闭回到原位置)
Aug 29 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
Jun 19 Javascript
简单实现js上传文件功能
Aug 21 Javascript
babel的使用及安装配置教程
Feb 22 Javascript
微信小程序左滑动显示菜单功能的实现
Jun 14 Javascript
小程序登录/注册页面设计的实现代码
May 24 Javascript
Vue动态生成表格的行和列
Jul 18 Javascript
微信小程序之左右布局的实现代码
Dec 13 Javascript
JS数组索引检测中的数据类型问题详解
Jan 11 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
JAVA/JSP学习系列之二
2006/10/09 PHP
php将数据库中的电话号码读取出来并生成图片
2008/08/31 PHP
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
2016/03/17 PHP
PHP封装的分页类与简单用法示例
2019/02/25 PHP
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
让ie6也支持websocket采用flash封装实现
2013/02/18 Javascript
JS验证身份证有效性示例
2013/10/11 Javascript
jquery制作居中遮罩层效果分享
2014/02/21 Javascript
实现js保留小数点后N位的代码
2014/11/13 Javascript
基于豆瓣API+Angular开发的web App
2015/01/02 Javascript
使用window.prompt()实现弹出用户输入的对话框
2015/04/13 Javascript
探寻JavaScript中this指针指向
2016/04/23 Javascript
jquery动态创建div与input的实例代码
2016/10/12 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
2017/09/12 Javascript
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
如何使用CSS3+JQuery实现悬浮墙式菜单
2019/06/18 jQuery
微信小程序调用天气接口并且渲染在页面过程详解
2019/06/24 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
2019/10/26 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
2019/11/14 Javascript
jQuery插件实现图片轮播效果
2020/10/19 jQuery
python从入门到精通(DAY 1)
2015/12/20 Python
Java Web开发过程中登陆模块的验证码的实现方式总结
2016/05/25 Python
将python运行结果保存至本地文件中的示例讲解
2019/07/11 Python
Python 动态导入对象,importlib.import_module()的使用方法
2019/08/28 Python
Python数据分析库pandas高级接口dt的使用详解
2020/12/11 Python
详解CSS3 弹性布局快速入门
2019/06/06 HTML / CSS
台湾线上百货零售购物平台:friDay购物
2017/08/18 全球购物
亚马逊印度站:Amazon.in
2017/10/15 全球购物
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
Topshop美国官网:英国快速时尚品牌
2019/05/16 全球购物
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
光盘行动倡议书
2014/02/02 职场文书
优秀少先队辅导员事迹材料
2014/12/24 职场文书
清洁工岗位职责
2015/02/13 职场文书
唐山大地震观后感
2015/06/05 职场文书