首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要理解Javascript寄生继承

需要理解Javascript寄生继承
EN

Stack Overflow用户
提问于 2014-04-23 08:48:09
回答 2查看 2.4K关注 0票数 3

需要了解寄生遗传的实际作用。

我引用了这个链接:javascript中的寄生继承

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

代码语言: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;
}

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

代码语言:javascript
复制
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');

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2014-04-23 09:32:57

第一个示例:

因为所有的对象文本({..})都是从Object.prototype继承的,所以它不能工作。因此,它们将不具有prototype属性(只有函数对象具有prototype属性)。因此,Shape.prototype将是undefined,您正在尝试在undefined上创建toString属性,这是不可能的。这就是它失败的原因。

第二个示例:

这遵循寄生遗传的思想。子构造函数,首先使用父构造函数构造对象。然后将其扩展到它的需要,并返回父类型的自定义对象。由于对象是父对象的类型,它仍然可以访问父对象原型对象中的函数和数据。

引用寄生维基百科网页的话,

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

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

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

票数 5
EN

Stack Overflow用户

发布于 2014-04-23 09:15:16

Javascript使用原型模型进行继承。这意味着您可以通过复制现有对象并添加属性来创建新对象;一个对象的原型只是另一个对象。

在大多数面向对象语言(如C++、Java等)中,有一个严格的类和实例系统;如果您想要一个类似于Foo但具有Hat属性的Bar,您必须定义一个类Bar,它继承了Foo (或包含Foo的一个实例),然后实例化类以创建一个新的BarObject。相比之下,在Javascript中,您所拥有的只是实例,要创建一个新类型,只需向现有的实例添加一些内容。

在示例中,Employee构造函数返回一个已修改为向其添加group属性的Person对象,而不是返回一个新的Employee对象。它是从人身上寄生而来的,但随着这一新的财产而扩展。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23239234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档