原型和用法 Javascript

Prototypes and usage Javascript

下面有一段代码:

function Foo(name){
    this.name = name;
}

Foo.prototype.myName = function() {
    return this.name;
}

function Bar(name, label){
  Foo.call(this, name);
  this.label = label;

}
Bar.prototype = Object.create(Foo.prototype);

Bar.prototype.myLabel = function(){
   return this.label;
}

var a = new Bar("a" , "obj a");

a.myName();
a.myLabel();

好的,现在按照我的理解

  1. 它创建了一个函数 Foo 来设置名称
  2. 它在 Foo 的链接原型对象上创建了一个函数 myName
  3. 它创建了一个函数 Bar,它只设置标签并使用函数 Foo 的功能来设置名称,而不是自己设置。
  4. 那么Foo和Bar之间就建立了原型联动。所以我假设 Foo 和 Bar 有两个独立的原型对象相互链接。
  5. 现在 Bar 的原型对象内部有一个函数 myLabel
  6. 调用 new Bar 会创建一个新对象 a 并将其原型对象链接到 Bar 的原型。

所以要点是:

这样的思路正确吗?请纠正或添加一些内容以启发讨论。我对这门语言相当陌生,它的细微差别几乎没有使用 cases/practical 原型示例。

首先要枚举Foo.prototype:

Foo.prototype = { constructor: Foo, myName: function() { return this.name}};

然后 Bar 调用 Foo 将 'name' 应用于正在构造的 Bar 实例,而不是自己执行,然后再将其第二个参数设置为新的 Bar 对象 属性.

但是 Bar.prototype 被设置为 {} 典型地继承自 Foo.prototype。例如,Bar.prototype.constructor == Foo; // true

Bar.prototype 分配了一个本地自己的 属性 方法 myLabel,可由 Bar 个对象继承,但不能由 Foo 个对象继承。

所以第 1、2、3 点是正确的。

第 4 点不正确。建立了原型继承,使得 Bar.prototype 继承自 Foo.prototype。它不是相互的,是一种单向继承:JavaScript 不支持任何类型的双向原型继承。

第 5 点和第 6 点是正确的。