使用隐藏的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 相关文章推荐
解决遍历时Array.indexOf产生的性能问题
Jul 03 Javascript
jquery制作搜狐快站页面效果示例分享
Feb 21 Javascript
基于javascript实现图片懒加载
Jan 05 Javascript
使用jQuery操作HTML的table表格的实例解析
Mar 13 Javascript
BootStrap无限级分类(无限极分类封装版)
Aug 26 Javascript
jQuery ajax MD5实现用户注册即时验证功能
Oct 11 Javascript
easyui-combobox 实现简单的自动补全功能示例
Nov 08 Javascript
DWR3 访问WEB元素的两种方法实例详解
Jan 03 Javascript
AngularJS路由实现页面跳转实例
Mar 03 Javascript
vue 实现路由跳转时更改页面title
Nov 05 Javascript
开发Node CLI构建微信小程序脚手架的示例
Mar 27 Javascript
vue中使用v-for时为什么不能用index作为key
Apr 04 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 - Html Transfer Code
2006/10/09 PHP
Discuz 5.0 中读取纯真IP数据库函数分析
2007/03/16 PHP
php车辆违章查询数据示例
2016/10/14 PHP
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
Jquery+JSon 无刷新分页实现代码
2010/04/01 Javascript
JavaScript实现的购物车效果可以运用在好多地方
2014/05/09 Javascript
js使用html()或text()方法获取设置p标签的显示的值
2014/08/01 Javascript
javascript中mouseover、mouseout使用详解
2015/07/19 Javascript
基于javascript实现泡泡大冒险网页版小游戏
2016/03/23 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
JS html时钟制作代码分享
2017/03/03 Javascript
jQuery阻止移动端遮罩层后页面滚动
2017/03/15 Javascript
Vue 通过自定义指令回顾v-内置指令(小结)
2018/09/03 Javascript
详解SPA中前端路由基本原理与实现方式
2018/09/12 Javascript
Vue-cli3.x + axios 跨域方案踩坑指北
2019/07/04 Javascript
JS如何生成随机验证码
2020/03/02 Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
2020/03/10 Javascript
在Python的Django框架中实现Hacker News的一些功能
2015/04/17 Python
Python在Console下显示文本进度条的方法
2016/02/14 Python
深入理解Python装饰器
2016/07/27 Python
用python结合jieba和wordcloud实现词云效果
2017/09/05 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
PyTorch上实现卷积神经网络CNN的方法
2018/04/28 Python
tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式
2020/01/23 Python
Python unittest单元测试openpyxl实现过程解析
2020/05/27 Python
Python中random模块常用方法的使用教程
2020/10/04 Python
Python绘图实现台风路径可视化代码实例
2020/10/23 Python
详解CSS3:overflow属性
2020/11/17 HTML / CSS
e路東瀛(JAPANiCAN)香港:日本旅游、日本酒店和温泉旅馆预订
2018/11/21 全球购物
一道SQL存储过程面试题
2016/10/07 面试题
幼儿园大班毕业感言
2014/02/06 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
2014个人年终工作总结范文
2014/12/15 职场文书
学前班语言教学计划
2015/01/20 职场文书
python读取pdf格式文档的实现代码
2021/04/01 Python
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android