js 模拟“类”继承
javascript中实际上是没有类这个概念的,他的类是在方法的基础之上的,因此实现类继承的思想是把父类的属性和方法指向子类。(个人理解)
JavaScript 中的继承可以通过原型链来实现,调用对象上的一个方法,由于方法在JavaScript 对象中是对
另一个函数对象的引用,因此解释器会在对象中查找该属性,如果没有找到,则在其内部对象prototype 对象
上搜索,由于prototype 对象与对象本身的结构是一样的,因此这个过程会一直回溯到发现该属性,则调用该
属性,否则,报告一个错误。关于原型继承,我们不妨看一个小例 子
function Base(){ this.baseFunc=function(){ alert("base behavior"); } } function Middle(){ this.middleFunc=function(){ alert("middle behavior"); } } Middle.prototype=new Base(); function Final(){ this.finalFunc=function(){ alert("final behavior"); } } Final.prototype=new Middle(); function test(){ var obj = new Final(); obj.baseFunc();//base behavior obj.middleFunc();//middle behavior obj.finalFunc();//final behavior } test();
例子二:
function ClassA(sColor) { this.color = sColor } ClassA.prototype.sayColor = function () { alert(this.color); } function ClassB(sColor, sName) { //执行ClassA(sColor)方法,但是里面的this现在已经是ClassB了,但是sayColor方法没有继承过来,因为是在prototype原型链表后的,只有new ClassA才能继承,这个方法的目的就是实现属性的继承 ClassA.call(this, sColor); this.name = sName; } //将ClassA链表后面的方法赋值给ClassB.prototype,这样sayColor方法也就在ClassB链表后面,实现方法继承 ClassB.prototype = new ClassA(); ClassB.prototype.sayName = function () { alert(this.name); } var obja = new ClassA("RED"); var objb = new ClassB("blue", "huangbiao"); obja.sayColor();//RED objb.sayColor();//blue objb.sayName();//huangbiao
使用运行构造方法实现继承
function ClassA(sColor) { this.color = sColor; this.sayColor = function () { alert(this.color); } } function ClassB(sColor) {} function ClassB(sColor, sName) { //定义一个构造方法属性,然后运行这个构造方法,实际上就是运行父类ClassA,将它的属性和方法全部继承过来,因为这个this指向的是ClassB而不是ClassA了 this.struct = ClassA; this.struct(sColor); //删除这个构造属性,但是够着属性里面的内容已经继承过来了,因此删除这个多余的属性 delete this.struct; this.name = sName; this.sayName = function () { alert(this.name); } } var obja = new ClassA("RED"); var objb = new ClassB("blue", "huangbiao"); alert(objb.color);//blue obja.sayColor();//RED objb.sayColor();//blue objb.sayName();//huangbiao
相关推荐
nmgxzm00 2020-11-10
ifconfig 2020-10-14
hhanbj 2020-11-17
zfszhangyuan 2020-11-16
古叶峰 2020-11-16
一个智障 2020-11-15
jipengx 2020-11-12
81427005 2020-11-11
xixixi 2020-11-11
游走的豚鼠君 2020-11-10
苗疆三刀的随手记 2020-11-10
Web卓不凡 2020-11-03
小飞侠V 2020-11-02
帕尼尼 2020-10-30
爱读书的旅行者 2020-10-26
帕尼尼 2020-10-23
杏仁技术站 2020-10-23
淼寒儿 2020-10-22