使用隐藏的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 select控制插件
Aug 17 Javascript
js限制文本框输入长度两种限制方式(长度、字节数)
Dec 19 Javascript
JQGrid的用法解析(列编辑,添加行,删除行)
Nov 08 Javascript
javascript模拟实现ajax加载框实例
Oct 15 Javascript
Javascript的表单验证-提交表单
Mar 18 Javascript
基于jQuery Ajax实现上传文件
Mar 24 Javascript
详解angular用$sce服务来过滤HTML标签
Apr 11 Javascript
BootStrap的两种模态框方式
May 10 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
Feb 03 Javascript
vue解决弹出蒙层滑动穿透问题的方法
Sep 22 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
Nov 05 Javascript
JavaScript实现随机五位数验证码
Sep 27 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数字格式化
2006/12/06 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
2013/01/11 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
2014/01/14 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
2015/12/17 PHP
基于jQuery的js分页代码
2010/06/10 Javascript
javascript中length属性的探索
2011/07/31 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
JavaScript修改css样式style动态改变元素样式
2013/12/16 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
js和jquery中循环的退出和继续下一个循环
2014/09/03 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
Bootstrap媒体对象的实现
2016/05/01 Javascript
js 动态生成json对象、时时更新json对象的方法
2016/12/02 Javascript
Javascript 实现放大镜效果实例详解
2016/12/03 Javascript
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
jQuery实现根据身份证号获取生日、年龄、性别等信息的方法
2019/01/09 jQuery
Vue中的this.$options.data()和this.$data用法说明
2020/07/26 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
2014/06/04 Python
Python爬虫:通过关键字爬取百度图片
2017/02/17 Python
Python3中使用PyMongo的方法详解
2017/07/28 Python
python输入错误密码用户锁定实现方法
2017/11/27 Python
VSCode下配置python调试运行环境的方法
2018/04/06 Python
用python一行代码得到数组中某个元素的个数方法
2019/01/28 Python
Python批量生成幻影坦克图片实例代码
2019/06/04 Python
python 计算方位角实例(根据两点的坐标计算)
2020/01/17 Python
Python tornado上传文件的功能
2020/03/26 Python
Python制作简单的剪刀石头布游戏
2020/12/10 Python
python中pivot()函数基础知识点
2021/01/03 Python
linux面试题参考答案(5)
2014/09/01 面试题
学术诚信承诺书
2014/05/26 职场文书
销售员试用期自我评价
2014/09/15 职场文书
大学生职业生涯十年规划书范文
2014/09/17 职场文书
团代会邀请函
2015/02/02 职场文书
消费者投诉书范文
2015/07/02 职场文书