js 原型继承

来源:互联网 发布:锐捷网络和华为 编辑:程序博客网 时间:2024/05/16 12:37

JavaScript 中的继承可以通过原型链来实现,调用对象上的一个方法,由于方法在 JavaScript 对象中是对另一个函数对象的引用,因此解释器会在对象中查找该属性,如果没有找到,则在其内部对象 prototype 对象上搜索,由于 prototype 对象与对象本身的结 构是一样的,因此这个过程会一直回溯到发现该属性,则调用该属性,否则,报告一个错误。关于原型继承,我们不妨看一个小例子:

function Base(){this.baseFunc = function(){print("base behavior"); }}function Middle(){ this.middleFunc = function(){print("middle behavior"); }}Middle.prototype = new Base();function Final(){this.finalFunc = function(){print("final behavior"); }}Final.prototype = new Middle();function test(){var obj = new Final(); obj.baseFunc(); obj.middleFunc(); obj.finalFunc();}
  •  问题 
  •   
  •  

图 原型链的示意图
在 function test 中,我们 new 了一个 Final 对象,然后依次调用 obj.baseFunc,由于 obj 对象上并无此方法,则按照上边提到的规则,进行回溯,在其原型链上搜索,由于 Final 的原型链上包含 Middle,而 Middle 上又包含 Base,因此会执行这个方法,这样就实现了类的继承。
base behaviormiddle behaviorfinal behavior
但是这种继承形式与传统的 OO 语言大相径庭,初学者很难适应,我们后边的章节会涉及到一个比较好的 JavaScript 的面向对象基础包 Base,使用 Base 包,虽然编码风格 上会和传统的 OO 语言不同,但是读者很快就会发现这种风格的好

0 0