手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >用方法封装javascript的new操作符(一)
用方法封装javascript的new操作符(一)
摘要:先看个例子:复制代码代码如下:varClass={create:function(){returnfunction(){this.initi...

先看个例子:

复制代码 代码如下:

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的new操作符(一)】相关文章:

JavaScript的Date()方法使用详解

理解javascript的caller,callee,call,apply概念

怎么用javascript进行拖拽第1/2页

理解javascript定时器中的单线程

javascript事件冒泡实例分析

javascript实现树形菜单的方法

javascript常用的方法分享

javascript中eval解析JSON字符串

简介JavaScript中Math.LOG10E属性的使用

JavaScript中Number.MIN_VALUE属性的使用示例

精品推荐
分类导航