使用隐藏的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下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
Oct 22 Javascript
基于JQuery的Select选择框的华丽变身
Aug 23 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
Apr 12 Javascript
js匿名函数的调用示例(形式多种多样)
Aug 20 Javascript
介绍JavaScript中Math.abs()方法的使用
Jun 14 Javascript
在ASP.NET MVC项目中使用RequireJS库的用法示例
Feb 15 Javascript
jQuery获取table行数并输出单元格内容的实现方法
Jun 30 Javascript
js正则表达式惰性匹配和贪婪匹配用法分析
Dec 26 Javascript
详解AngularJS用Interceptors来统一处理HTTP请求和响应
Jun 08 Javascript
react-native 封装选择弹出框示例(试用ios&android)
Jul 11 Javascript
JavaScript实现的鼠标跟随特效示例【2则实例】
Dec 22 Javascript
微信小程序使用map组件实现路线规划功能示例
Jan 22 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 strlen mb_strlen计算中英文混排字符串长度
2009/07/10 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
2015/05/11 PHP
thinkphp5+layui实现的分页样式示例
2019/10/08 PHP
JavaScript实现禁止后退的方法
2006/12/27 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
2013/04/07 Javascript
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
js实现图片从左往右渐变切换效果的方法
2015/02/06 Javascript
实例详解angularjs和ajax的结合使用
2015/10/22 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
noty ? jQuery通知插件全面解析
2016/05/18 Javascript
深入理解jQuery之事件移除
2016/06/02 Javascript
js实现音频控制进度条功能
2017/04/01 Javascript
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
JS中this的4种绑定规则详解
2020/02/04 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
2020/04/09 Javascript
vue实现前端分页完整代码
2020/06/17 Javascript
Python操作Access数据库基本步骤分析
2016/09/19 Python
python实现一个简单的并查集的示例代码
2018/03/19 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
2019/01/15 Python
Python如何实现定时器功能
2020/05/28 Python
matplotlib之pyplot模块之标题(title()和suptitle())
2021/02/22 Python
程序设计HTML5 Canvas API
2013/04/08 HTML / CSS
什么是makefile? 如何编写makefile?
2012/08/08 面试题
高中生毕业自我鉴定
2013/10/10 职场文书
教师自我鉴定范文
2013/11/10 职场文书
机械工程师的岗位职责
2013/11/17 职场文书
服务之星获奖感言
2014/01/21 职场文书
2014年五四青年节活动方案
2014/03/29 职场文书
环保建议书300字
2014/05/14 职场文书
党员个人党性分析材料
2014/12/18 职场文书
投资意向协议书
2015/01/29 职场文书
预备党员入党感言
2015/08/01 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers
CSS3实现的水平标题菜单
2021/04/14 HTML / CSS
Pandas自定义选项option设置
2021/07/25 Python
微信小程序中使用vant框架的具体步骤
2022/02/18 Javascript