作家
登录

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

作者: 来源:www.28hudong.com 2013-03-30 01:05:35 阅读 我要评论

先看个例子: 复制代码 代码如下: 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方法。

  推荐阅读

  用Jquery实现多级下拉框无刷新的联动

最开始准备用.NET只带的AJAX实现,发现达不到想要的效果。后来采取JQuery中AJAX功能,通过异步调用C#写的web服务实现。 load()方法可以说是JQuery中最简单的AJAX方法,它用于获取目标服务器的响应并将结果显示到页>>>详细阅读


本文标题:用方法封装javascript的new操作符(一)

地址:http://www.17bianji.com/kaifa2/JS/25162.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)