日期:2014-05-16 浏览次数:20356 次
一,prototype(对象)(原型链)
可使javascript拥有
1,重写
2,添加方法
3,继承的机制
?
prototype继承原理:
每一个方法的创建,都有着一个单例的对象functionName.prototype, 在使用这个方法创建的每一个对象,该prototype都会赋值给他,(prototype里面包含了一些属性,方法包含construtor)
也正因为每个对象都共享一个prototype,所以可以操作这个prototype,
1,将你类对象赋给他达到继承的目的,看下面文章
2,可在该prototype上,重写方法,或者添加方法
?
1,重写
如:Array.prototype.push=function(){ //execute your's function }
2,添加方法
Array.prototype.newMethod=function(){ //add new method for after use }
3,继承
//---------------下面实例实现
?
4,prototype的了解.
function F1(){ } F1.prototype.run=function(){ alert("execute run.f1 method"); } var a1=new F1(); var a2=new F1(); if(a1.run()===a2.run());//推出prototype是单例的对象,每一个对象的创建prototype相同
?
二,?constructor(方法):说明本身是由怎么构造而成的
var arrayObject=new Array(); arrayObject.constructor;//Array Array.constructor;//Function Object.constructor;//Function Object.prototype为null
Function.constructor;//Function(最高级别即本身)
??可跟prototype应用操作:
如arrayObject.construcotr.addmethod=function(){}可这样为Array提供方法
?
使用prototype与constructor进行完整的继承封装
//为了达到封装的完善性,引申以下问题 //引申问题一,保证使每一个对象object.construcotr能够找到自己(function) //引申问题二,保证使之通过suberObject能找到父类 //问题一例子 function Parent(){ this.log=function(){ document.writeln("this is parent log.....<br>"); } } function Suber(){ this.log=function(){ document.writeln("this is suber log......<br>"); } } var suber1=new Suber(); //可得到子类本身 document.writeln(suber1.constructor); //故当其中有一个被改变时,另一个也会被改变.construcotr是相应的prototype中的一个属性,以下访问是同一个属性 document.writeln(suber1.constructor===Suber.prototype.constructor); document.writeln("<br>--------------------------------------------<br>"); //当继承时..... Suber.prototype=new Parent(); var suber2=new Suber(); //得到的是父类本身,丢失了自己的构造函数,故"问题一"出现 document.writeln(suber2.constructor); document.writeln("<br>--------------------------------------------<br>"); //解决"问题一"方法 Suber.prototype=new Parent(); Suber.prototype.constructor=Suber; var suber3=new Suber(); document.writeln(suber3.constructor); document.writeln("<br>--------------------------------------------<br>"); //这样一来,引申出"问题二",我们获取不到parent的本身方法 //故只能采用定义一个属性的方式来存储父类 //解决"问题二"方法 Suber.prototype=new Parent(); Suber.superClass=Parent;//每一级别都设置该属性进行存储父类方法 Suber.prototype.constructor=Suber; var suber4=new Suber(); document.writeln(suber4.constructor); document.writeln("<br>--------------------------------------------<br>"); document.writeln(Suber.superClass);?
//可参考extjs中的继承封装....
?
参考文章:http://hi.baidu.com/maxwin2008/blog/item/8da86102c1ceda034bfb51a3.html