JavaScript 继承模式详解:原型式、寄生式与寄生组合式

作者:异步漫步时间:2026-10-30 06:15:39浏览:280

本文深入解析 JavaScript 中除组合继承外的几种核心继承模式。详细阐述原型式继承中 Object.create() 的规范用法,介绍寄生式继承通过增强原型对象实现自定义属性的方法,并重点讲解寄生组合式继承如何结合构造函数与原型链,有效避免组合继承中父类构造函数被调用两次的问题,从而优化性能与内存使用。

JavaScript 继承模式概述

前文已对组合继承进行了介绍,本节将继续探讨其余几种常见的继承实现方式。

原型式继承与 Object.create

原型式继承

该方法通过调用一个函数,获取其返回的对象。此返回对象的原型指向传入该函数的参数对象,从而实现原型链的复用。

具体示例如下:


function  personObject(o){
    function F(){}
    F.prototype = o;
    return new F();
}
var person = {
   name:"Nicholas",
   friends:["Shelby","Court","Van"]
}

var person_one = personObject(person);

上述代码展示了 person 对象作为 person_one 的原型这一关系。ES5 标准引入了 Object.create() 方法来规范化原型式继承。该方法接受两个参数:第一个参数指定新对象的原型(如示例中的 person),第二个参数用于定义新对象的额外属性,此参数为可选。

示例代码如下:


var person_one = Object.create(person, {
        name: {
            value:"Jon"
      }
});

当仅需让一个对象与另一个对象保持相似的结构或行为时,可采用原型式继承。

寄生式继承的实现

寄生式继承

其实现逻辑是在函数内部执行一次原型式继承,随后为接收到的对象添加自定义的属性和方法,以增强其功能。

代码示例如下:


function createAnother(o){
   var person_one = personObject(o);
   person_one.sayHi = function(){
       alert(" hi ");
   }
   return person_one;
}

寄生组合式继承优化

寄生组合式继承

组合继承存在一个显著缺点,即父类构造函数会被调用两次。寄生组合式继承旨在解决此问题,它通过构造函数实现属性的继承,而原型方法则通过寄生式继承的方式获取,从而避免了重复调用。

实现代码如下:


function inherit(subType, superType){
   var prototype = Object(superType.prototype);
   prototype.constructor = subType;
   subType.prototype = prototype;
}

通过调用上述函数,可使 subType.prototype 的原型指向 superType.prototype,进而完成原型方法的继承。

以上内容为关于 JavaScript 继承模式的完整解析,希望能为读者提供参考与帮助。

作者最新文章