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
获得方法。当然,你可以这么做,但我认为那不是你想要的。这并不是新的
操作符是如何工作的。就像这个角度。。但让我回到这一点。。现在阅读更多关于这个话题的文章