需要了解Javascript寄生继承

Sid*_*yas 3 javascript inheritance

需要了解寄生继承实际上是做什么的。

我提到了这个链接:javascript中的寄生继承

我需要了解这个例子的作用:

Shape = {name: 'Shape'};
Shape.prototype.toString = function()
{
  return this.name;
};

function Rectangle(width, height) {
   var rect;
   P = function() {};
   P.prototype = Shape;
   rect = new P();
   rect.width = width;
   rect.height = height;
   return rect;
}
Run Code Online (Sandbox Code Playgroud)

第二个示例工作正常,但我需要知道“寄生继承从何而来?

var Person = function(name, age) 
{
  this.name = name;
  this.age = age;
};

var Employee = function(name, age, group) 
{
  var e = new Person(name, age);
  e.group = group;
  return e;
};

var testname= new Employee('ABC', 30, 'Developer');
Run Code Online (Sandbox Code Playgroud)

谢谢。

the*_*eye 5

第一个例子:

它不会工作,因为所有对象字面量 ( {..}) 都继承自Object.prototype. 因此,它们不会有prototype属性(只有 Function 对象才有prototype属性)。因此,Shape.prototype将是undefined并且您正在尝试在 上创建toString属性undefined,这是不可能的。这就是它失败的原因。

第二个例子:

这遵循寄生继承思想。子构造函数,首先用Parent的构造函数构造一个对象。然后它根据需要对其进行扩充并返回 Parent 类型的自定义对象。由于对象是父类型的,它仍然可以访问父原型对象中的函数和数据。

引自寄生虫维基百科页面

物种之间的关系,其中一个物种,寄生虫,以牺牲另一个物种,宿主为代价。

在这里,孩子是寄生虫,它使用父构造函数(主机)。

注意:子构造函数中的 return 语句非常重要。它必须返回新构造的对象。否则,默认情况下将返回一个新构造的 child 类型的对象。