javascript原型链接在这方面存在混乱

javascript原型链接在这方面存在混乱,javascript,Javascript,而下面的教程代码 Animal = function(name) {this.name = name} Animal.prototype.eats = function(){ return this.name + ' is eating' } Chordate = function(name){Animal.call(this,name)} 我理解调用是如何工作的(基本上,在这种情况下,这变成了这个)。。。但我的问题是,如何使用这个? 对不起,我理解原型是如何工作的。。但真的,我

而下面的教程代码

Animal = function(name) {this.name = name}
Animal.prototype.eats = function(){
      return this.name + ' is eating'
}

Chordate = function(name){Animal.call(this,name)}
我理解
调用
是如何工作的(基本上,在这种情况下,这变成了
这个
)。。。但我的问题是,如何使用这个? 对不起,我理解原型是如何工作的。。但真的,我不明白一旦你像上面那样设置了Chordate。。如何使用它? 这有什么用?或者,您现在打算如何指定

有人能解释一下吗?

创建一个链接到
动物的原型方法:

Chordate.prototype = Object.create(Animal.prototype)
然后
new
it up:

var c = new Chordate('my name');

c.eats();
Animal.call(this,name)
类似于调用基本构造函数。它执行
Animal
构造函数并传入
name
,但使用正确的
上下文:

Animal = function(name) {
    // "this" will be your Chordate instance
    this.name = name
}

让我们想象你正在建造一只动物:

 new Animal();
在施工过程中,它会在画布上画一只新动物。构造函数将如下所示:

 function Animal(){
   canvas.draw(this.x,this.y,this.image);
  }
现在你有一只老虎了。老虎如果被造就应该吼叫

 function Tiger(){
   this.roar();
 }
现在呢?它是一种动物,所以它被添加到画布上,对吗?不需要。由于js继承系统,您需要手动执行此操作。因此,当老虎被构造时,你还需要将其构造为动物:

 Animal.call(this);
使用新的类语法更容易做到这一点:

 class Animal{
   constructor(){
     this.draw(this.x,this.y,this.image);
   }
}

class Tiger extends Animal{
  constructor(){
    this.roar();
    super()//construct Animal
  }
}
这只是对其他答案的补充,太长了,无法发表评论

也许这有助于您了解
新的
操作符的实际功能:

var newInstance=newconstructorfunction(arg1,arg2);
  • 创建一个新对象。此对象的原型是
    构造函数。原型
  • var newInstance=Object.create(ConstructorFunction.prototype);
    
  • 使用新创建的对象调用构造函数
  • ConstructorFunction.call(newInstance,arg1,arg2);
    
    如果
    ConstructorFunction
    继承自另一个“类”,则它必须调用其超级构造函数。以下代码就是这样做的:

    函数父级(){
    //此===newInstance
    }
    函数子(){
    //此===newInstance
    调用(this);//调用超级构造函数
    }
    Child.prototype=Object.create(Parent.prototype);
    var newInstance=newchild();
    //或:
    var newInstance=Object.create(Child.prototype);
    Child.call(newInstance);//调用构造函数,该构造函数调用超级构造函数
    
    提供了一些很好的示例,说明您何时可能需要使用它。您缺少Chordate.prototype=Object.create(Animal.prototype)立即读取MDN。。那么新的脊索动物(
    无论是什么,
    ,arg)在那个例子中,
    名称是从哪里来的呢?真的像这样。。但是,您是否可以在没有ConstructorFunction的情况下创建第一步?可以是Object.create(Object.prototype)吗?我想从头开始,不必依赖以前的任何东西来理解这一点。。可能是这样吗?如果是
    Object.create(Object.prototype)
    ,那么您将无法从
    ConstructorFunction.prototype
    获得方法。当然,你可以这么做,但我认为那不是你想要的。这并不是新的
    操作符是如何工作的。就像这个角度。。但让我回到这一点。。现在阅读更多关于这个话题的文章