使用隐藏的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代码
Mar 10 Javascript
jquery创建并行对象或者合并对象的实现代码
Oct 10 Javascript
js中prototype用法详细介绍
Nov 14 Javascript
js检测浏览器版本、核心、是否移动端示例
Apr 24 Javascript
jQuery实现仿Alipay支付宝首页全屏焦点图切换特效
May 04 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
Jan 11 Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
Mar 01 Javascript
利用jqgrid实现上移下移单元格功能
Nov 07 Javascript
带你使用webpack快速构建web项目的方法
Nov 12 Javascript
原生JavaScript实现随机点名表
Jan 14 Javascript
react 路由Link配置详解
Nov 11 Javascript
Vue组件化(ref,props, mixin,.插件)详解
May 15 Vue.js
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字符串的替换,分割和连接方法
2016/05/23 PHP
PHP基于递归算法解决兔子生兔子问题
2018/05/11 PHP
了解jQuery技巧来提高你的代码
2010/01/08 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
JS模式之单例模式基本用法
2015/06/30 Javascript
jquery ajax分页插件的简单实现
2016/01/27 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
2016/01/31 Javascript
深入理解JavaScript程序中内存泄漏
2016/03/17 Javascript
JavaScript之json_动力节点Java学院整理
2017/06/29 Javascript
浅谈vue中数据双向绑定的实现原理
2017/09/14 Javascript
使用node打造自己的命令行工具方法教程
2018/03/26 Javascript
Vue中使用webpack别名的方法实例详解
2018/06/19 Javascript
深入理解react 组件类型及使用场景
2019/03/07 Javascript
用Vue编写抽象组件的方法
2019/05/06 Javascript
vue实现手机号码的校验实例代码(防抖函数的应用场景)
2019/09/05 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
[01:26]神话结束了,却也刚刚开始——DOTA2新英雄玛尔斯驾临战场
2019/03/10 DOTA
py2exe 编译ico图标的代码
2013/03/08 Python
Python标准库之循环器(itertools)介绍
2014/11/25 Python
开始着手第一个Django项目
2015/07/15 Python
Python实现的快速排序算法详解
2017/08/01 Python
使用Python实现跳帧截取视频帧
2019/05/31 Python
python xlwt如何设置单元格的自定义背景颜色
2019/09/03 Python
django form和field具体方法和属性说明
2020/07/09 Python
详解Selenium 元素定位和WebDriver常用方法
2020/12/04 Python
俄罗斯运动鞋商店:Sneakerhead
2018/05/10 全球购物
英国领先的新鲜松露和最好的松露产品供应商:TruffleHunter
2019/08/26 全球购物
警示教育活动总结
2014/05/05 职场文书
求职信结尾怎么写
2014/05/26 职场文书
放弃继承权公证书
2015/01/23 职场文书
长城英文导游词
2015/01/30 职场文书
幼儿园教学工作总结2015
2015/05/12 职场文书
公司档案管理制度
2015/08/05 职场文书
创业计划书之寿司
2019/07/19 职场文书
Python中的套接字编程是什么?
2021/06/21 Python