JavaScript ----------------- 寄生式继承

寄生式继承

  寄生式继承是于原型式继承紧密相关的一种思路。寄生式基础的思路与寄生构造函数和工厂模式类似,既创建一个仅用于封装继承过程的函数,该函数内部以某种方式来增强对象,最后再像真地是它做了所有工作一样返回对象。

以下代码示范了寄生式继承模式。

function object(o){

  function F(){

  }

  F.prototype=o;

   return new F();

};


function createAnother(original){ var clone = object(original); // 通过调用函数创建一个新对象 clone.sayHi = function(){ //以某种方式增强真个对象 alert("hi"); } return clone; //返回这个对象 }

在这个例子中,createAnother() 函数接收一个参数,也就是将要作为新对象基础的对象。然后把这个对象(original)传递给object()函数,将返回的结果赋值给clone。再为其添加一个sayHi方法,最后返回clone对象。

可以像下面这样使用 createAnother()方法

 var person={
            name:"Nicholas",
            friends:["Shelby","Court","Van"]
       }
 var now = createAnother(person);
 now.sayHi(); // hi

通过createAnother() 基于person对象返回的一个新对象------ now ;不仅仅拥有person对象的全部方法和属性,还拥有自己的sayHi方法;

在主要考虑对象而不是自定义类型和构造函数的情况下,寄生式继承也是一种有用的模式。前面示范继承模式时使用的object()函数不是必需的;任何能够返回新对象的函数都适用于此模式。

 注意:使用寄生式继承方式来为对象添加函数,由于不能达到函数复用,导致效率变低,这与构造函数模式类似。