使用隐藏的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 相关文章推荐
用apply让javascript函数仅执行一次的代码
Jun 27 Javascript
高效的获取当前元素是父元素的第几个子元素
Oct 15 Javascript
js弹出层永远居中实现思路及代码
Nov 29 Javascript
利用Keydown事件阻止用户输入实现代码
Mar 11 Javascript
confirm确认对话框的实现方法总结
Jun 17 Javascript
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
Nov 24 Javascript
js微信应用场景之微信音乐相册案例分享
Aug 11 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
May 21 Javascript
微信小程序引入Vant组件库过程解析
Aug 06 Javascript
基于vue实现图片验证码倒计时60s功能
Dec 10 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
Dec 12 Javascript
js实现html滑动图片拼图验证
Jun 24 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的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
php实现快速排序法函数代码
2012/08/27 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
php约瑟夫问题解决关于处死犯人的算法
2015/03/23 PHP
PHP对象克隆clone用法示例
2016/09/28 PHP
PHP中for循环与foreach的区别
2017/03/06 PHP
php头像上传预览实例代码
2017/05/02 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
jquery 必填项判断表单是否为空的方法
2008/09/14 Javascript
node.js超时timeout详解
2014/11/26 Javascript
详解JavaScript中|单竖杠运算符的使用方法
2016/05/23 Javascript
AngularJS实现按钮提示与点击变色效果
2016/09/07 Javascript
JavaScript 链式结构序列化详解
2016/09/30 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
详解Vue.js 2.0 如何使用axios
2017/04/21 Javascript
浅谈vue-router 路由传参的方法
2017/12/27 Javascript
关于layui导航栏不展示下拉列表的解决方法
2019/09/25 Javascript
微信小程序实现带放大效果的轮播图
2020/05/26 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
2020/10/29 Javascript
python安装twisted的问题解析
2018/08/21 Python
浅谈django的render函数的参数问题
2018/10/16 Python
python实现俄罗斯方块游戏(改进版)
2020/03/13 Python
Tensorflow与Keras自适应使用显存方式
2020/06/22 Python
pytorch 多分类问题,计算百分比操作
2020/07/09 Python
Python: glob匹配文件的操作
2020/12/11 Python
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
生物科学专业个人求职信范文
2013/12/05 职场文书
学习十八届三中全会精神实施方案
2014/02/17 职场文书
施工安全标语
2014/06/07 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
2016优秀员工先进事迹材料
2016/02/25 职场文书
一个成功的互联网创业项目,必须满足这些要求
2019/08/23 职场文书
golang 实现菜单树的生成方式
2021/04/28 Golang
python字典进行运算原理及实例分享
2021/08/02 Python
详解Spring Security如何在权限中使用通配符
2022/06/28 Java/Android