用方法封装javascript的new操作符(一)


Posted in Javascript onDecember 25, 2010

先看个例子:

var Class = { 
create : function () { 
return function () { 
this.initialize.apply(this, arguments); 
} 
} 
} 
var A = Class.create(); 
A.prototype = { 
initialize:function(){ 
//todo 
} 
test:"abc" 
} 
var a = new A();

这是很多jser构建类和实例化对象的过程, 细心的人会发现: 实例化的a会多一个initialize方法。initialize在实例化时做为代理在实例化后就没有存在的意义了,而且有时候会引起不必要的麻烦,比如 for…in 语句遍历a时,会把initialize这个方法遍历出来。
我首先想到的是用前面博文中写的Class.js来做,这样就非常干净。但是在Class.js中的继承机制有一些bug的,在不入侵(即:不修改原型、不生成额外属性)的条件下,要实现接口更是难上加难了。于是我就想到封装new操作符,这样做的好处就是 可先修改原型,在封装new的方法中,实现继承、接口,并去除额外属性。
我们首先给new操作符的简单的实现一下:
function New(){//new是关键字,所以要区别一下 
var as = [],args = arguments; 
for(var i=1;i<args.length;i++){ 
as.push('args['+i+']'); 
} 
nobj = eval("new args[0]("+as.join(",")+");"); 
return nobj; 
} 
接下来测试一下: 
function A(n){ this.name = n;} 
var a1 = new A('ts'); 
alert(a1.name);//ts 
var a2 = New(A,'tangoboy'); 
alert(a2.name);//tangoboy 
测试成功,现在New方法基本可以代替new操作符实例化对象了。 
然后 解决文章开始的initialize问题就非常简单了: 
function New(){ 
var as = [],args = arguments; 
for(var i=1;i<args.length;i++){ 
as.push('args['+i+']'); 
} 
nobj = eval("new args[0]("+as.join(",")+");"); 
delete nobj.initialize;//删除实例化对象的方法 
return nobj; 
}

下一节开始丰富New方法。
Javascript 相关文章推荐
IE与Firefox在JavaScript上的7个不同写法小结
Sep 14 Javascript
基于KMP算法JavaScript的实现方法分析
May 03 Javascript
JavaScript对象之深度克隆介绍
Dec 08 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
Nov 30 Javascript
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
May 27 Javascript
jQuery Datatable 多个查询条件自定义提交事件(推荐)
Aug 24 jQuery
input type=file 选择图片并且实现预览效果的实例
Oct 26 Javascript
vue+axios新手实践实现登陆的示例代码
Jun 06 Javascript
js实现页面图片消除效果
Mar 24 Javascript
jQuery 移除事件的方法
Jun 20 jQuery
vue.js实现h5机器人聊天(测试版)
Jul 16 Javascript
React实现todolist功能
Dec 28 Javascript
一些javascript一些题目的解析
Dec 25 #Javascript
javascript字符串拼接的效率问题
Dec 25 #Javascript
原生javascript获取元素样式属性值的方法
Dec 25 #Javascript
javascript中使用replaceAll()函数实现字符替换的方法
Dec 25 #Javascript
Javascript动态绑定事件的简单实现代码
Dec 25 #Javascript
浅析javascript闭包 实例分析
Dec 25 #Javascript
父子窗体间传递JSON格式的数据的代码
Dec 25 #Javascript
You might like
php json_encode值中大括号与花括号区别
2013/09/30 PHP
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
php中的字符编码转换函数用法示例
2014/10/20 PHP
win平台安装配置Nginx+php+mysql 环境
2016/01/12 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
2020/05/02 PHP
40个新鲜出炉的jQuery 插件和免费教程[上]
2012/07/24 Javascript
js判断两个日期是否相等的方法
2013/09/10 Javascript
php跨域调用json的例子
2013/11/13 Javascript
js获取当前时间显示在页面上并每秒刷新
2014/12/24 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
javascript 开发之百度地图使用到的js函数整理
2017/05/19 Javascript
浅谈Node新版本13.2.0正式支持ES Modules特性
2019/11/25 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
2019/12/12 Javascript
three.js 如何制作魔方
2020/07/31 Javascript
动态实现element ui的el-table某列数据不同样式的示例
2021/01/22 Javascript
python del()函数用法
2013/03/24 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
Python修改文件往指定行插入内容的实例
2019/01/30 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
Python爬虫中Selenium实现文件上传
2020/12/04 Python
Herschel美国官网:背包、手提袋及配件
2020/03/10 全球购物
Bitiba意大利:在线宠物商店
2020/10/31 全球购物
临床医学应届生求职信
2013/11/06 职场文书
精彩的大学生自我评价
2013/11/17 职场文书
《满井游记》教学反思
2014/02/26 职场文书
《黄山奇石》教学反思
2014/04/19 职场文书
化工工艺设计求职信
2014/06/25 职场文书
法定代表人授权委托书范文
2014/08/02 职场文书
学习张丽丽心得体会
2014/09/03 职场文书
检讨书1000字
2014/10/11 职场文书
同学会邀请函模板
2015/01/30 职场文书
2015年为民办实事工作总结
2015/05/26 职场文书
2019年学校消防安全责任书(2篇)
2019/10/09 职场文书
Go 语言中 20 个占位符的整理
2021/10/16 Golang
python 使用tkinter与messagebox写界面和弹窗
2022/03/20 Python