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)
谢谢。
第一个例子:
它不会工作,因为所有对象字面量 ( {..}
) 都继承自Object.prototype
. 因此,它们不会有prototype
属性(只有 Function 对象才有prototype
属性)。因此,Shape.prototype
将是undefined
并且您正在尝试在 上创建toString
属性undefined
,这是不可能的。这就是它失败的原因。
第二个例子:
这遵循寄生继承思想。子构造函数,首先用Parent的构造函数构造一个对象。然后它根据需要对其进行扩充并返回 Parent 类型的自定义对象。由于对象是父类型的,它仍然可以访问父原型对象中的函数和数据。
引自寄生虫维基百科页面,
物种之间的关系,其中一个物种,寄生虫,以牺牲另一个物种,宿主为代价。
在这里,孩子是寄生虫,它使用父构造函数(主机)。
注意:子构造函数中的 return 语句非常重要。它必须返回新构造的对象。否则,默认情况下将返回一个新构造的 child 类型的对象。