JavaScript入门教程

JavaScript简介
JavaScript语法基础
JavaScript流程控制
JavaScript函数
面向对象编程
JavaScript事件
JavaScript DOM
正则表达式
JavaScript BOM
AJAX

专题分析

浏览器兼容性
JS优化
Web前端开发规范
编辑器推荐
总结和笔记

学习助手

对象参考手册
ECMAScript分析
数据中心
QQ交流群

Javascript原型继承

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 behavior
middle behavior
final behavior
但是这种继承形式与传统的 OO 语言大相径庭,初学者很难适应,我们后边的章节会涉及到一个比较好的 JavaScript 的面向对象基础包 Base,使用 Base 包,虽然编码风格上会和传统的 OO 语言不同,但是读者很快就会发现这种风格的好处。