需要了解寄生遗传的实际作用。
我引用了这个链接: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');谢谢。
发布于 2014-04-23 09:32:57
第一个示例:
因为所有的对象文本({..})都是从Object.prototype继承的,所以它不能工作。因此,它们将不具有prototype属性(只有函数对象具有prototype属性)。因此,Shape.prototype将是undefined,您正在尝试在undefined上创建toString属性,这是不可能的。这就是它失败的原因。
第二个示例:
这遵循寄生遗传的思想。子构造函数,首先使用父构造函数构造对象。然后将其扩展到它的需要,并返回父类型的自定义对象。由于对象是父对象的类型,它仍然可以访问父对象原型对象中的函数和数据。
引用寄生维基百科网页的话,
物种之间的关系,其中一种是寄生虫,以牺牲另一种宿主的利益为代价。
在这里,子程序是寄生虫,它使用父构造函数(主机)。
注意:子构造函数中的返回语句非常重要。它必须返回新构造的对象。否则,默认情况下将返回新构造的子类型对象。
发布于 2014-04-23 09:15:16
Javascript使用原型模型进行继承。这意味着您可以通过复制现有对象并添加属性来创建新对象;一个对象的原型只是另一个对象。
在大多数面向对象语言(如C++、Java等)中,有一个严格的类和实例系统;如果您想要一个类似于Foo但具有Hat属性的Bar,您必须定义一个类Bar,它继承了Foo (或包含Foo的一个实例),然后实例化类以创建一个新的BarObject。相比之下,在Javascript中,您所拥有的只是实例,要创建一个新类型,只需向现有的实例添加一些内容。
在示例中,Employee构造函数返回一个已修改为向其添加group属性的Person对象,而不是返回一个新的Employee对象。它是从人身上寄生而来的,但随着这一新的财产而扩展。
https://stackoverflow.com/questions/23239234
复制相似问题