欢迎来到天天文库
浏览记录
ID:37781254
大小:28.50 KB
页数:5页
时间:2019-05-31
《浅谈javascript的原型继承》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、javascript的继承在很多框架中都有运用,尤其是原型式继承。首先要理解一个概念,什么是原型式继承?所谓的原型式继承,就是在函数内部先创建一个临时性的构造函数,然后将传入的对象做这个构造函数的原型,最后返回这个临时类型的新实例请看源码:复制代码代码如下:functionclone(o){varF=function(){};F.prototype=o;returnnewF();}首先看ext(4.1的1896行开始)的原型式继承。复制代码代码如下:varTemplateClass=function(){};va
2、rExtObject=Ext.Object={chain:function(object){TemplateClass.prototype=object;varresult=newTemplateClass();TemplateClass.prototype=null;returnresult;}}这里清除了object的prototype。再看一下jquery是怎么玩的继承。复制代码代码如下:varjQuery=function(selector,context){returnnewjQuery.fn.init
3、(selector,context,rootjQuery);};-----------------------jQuery.fn=jQuery.prototype={constructor:jQuery,init:function(selector,context,rootjQuery){-----------------------}}-------------------jQuery.fn.init.prototype=jQuery.fn;jquery玩的就比较高,借助jQuery.fn.init来完成,但是
4、思路一样。司徒正美的mass里也有类似的继承,在lang_fix.js里面第17行:复制代码代码如下:create:function(o){if(arguments.length>1){$.log("Object.createimplementationonlyacceptsthefirstparameter.")}functionF(){}F.prototype=o;returnnewF();}查看了一下es5的官方,找到了他的兼容补丁:复制代码代码如下://ES515.2.3.5//http://es5.gi
5、thub.com/#x15.2.3.5if(!Object.create){Object.create=functioncreate(prototype,properties){varobject;if(prototype===null){object={"__proto__":null};}else{if(typeofprototype!="object"){thrownewTypeError("typeofprototype["+(typeofprototype)+"]!='object'");}varTyp
6、e=function(){};Type.prototype=prototype;object=newType();//IEhasnobuilt-inimplementationof`Object.getPrototypeOf`//neither`__proto__`,butthismanuallysetting`__proto__`will//guaranteethat`Object.getPrototypeOf`willworkasexpectedwith//objectscreatedusing`Object
7、.create`object.__proto__=prototype;}if(properties!==void0){Object.defineProperties(object,properties);}returnobject;};}上面的代码考虑的就比较全面,但是需要另外引入Object.defineProperties的补丁才行,源码相对就比较多了。复制代码代码如下://ES515.2.3.6//http://es5.github.com/#x15.2.3.6//PatchforWebKitandIE8s
8、tandardmode//Designedbyhax//relatedissue:https://github.com/kriskowal/es5-shim/issues#issue/5//IE8Reference://http://msdn.microsoft.com/en-us/library/dd282900.aspx//http:/
此文档下载收益归作者所有