gpt4 book ai didi

javascript - 需要了解 Javascript 寄生继承

转载 作者:行者123 更新时间:2023-12-03 13:30:36 25 4
gpt4 key购买 nike

需要了解寄生继承的实际作用。

我引用了这个链接:Parasitic Inheritance in 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;
}

第二个例子很好,但我需要知道“寄生继承在哪里出现?

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');

谢谢。

最佳答案

第一个例子:

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

第二个例子:

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

引自 Parasitism wikipedia page ,

relationship between species, where one species, the parasite, benefits at the expense of the other, the host.

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

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

关于javascript - 需要了解 Javascript 寄生继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23239234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com