原型和用法 Javascript

Prototypes and usage Javascript

本文关键字:Javascript 用法 原型      更新时间:2023-09-26

我在下面有一大段代码:

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. 对新 Bar 的调用会创建一个新对象a并将其原型对象链接到 Bar 的原型。

所以外卖是:

  • Foo的原型包含一个get函数 - myName

  • Foo本身只是设置一个属性名称

  • Bar 的原型有一个 get 函数 - myLabel

  • 酒吧本身只是设置一个属性 - mylabel

  • 原型a's对象链接到Bar's prototype而而Foo's prototype .所以总共有三个原型对象。

这种思维方式是否正确? 请纠正或添加一些内容以启发讨论。我对这门语言相当陌生,它的细微差别,几乎没有原型的用例/实际示例。

首先列举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 点是正确的。