转到教程代码下面
Animal = function(name) {this.name = name}
Animal.prototype.eats = function(){
return this.name + ' is eating'
}
Chordate = function(name){Animal.call(this,name)}
我理解call
是如何工作的(基本上,在这种情况下,这会变成this
)...但我的问题是,如何使用它?
对不起,我理解原型是如何工作的......但实际上,一旦你按照上面的方式设置Chordate,我就不明白..如何使用它?
这有用吗?或者您现在如何指定this
?
有人可以解释w /例吗?
答案 0 :(得分:1)
创建指向Animal
原型方法的链接:
Chordate.prototype = Object.create(Animal.prototype)
然后new
:
var c = new Chordate('my name');
c.eats();
行Animal.call(this,name)
就像调用基础构造函数一样。它执行Animal
构造函数并传入name
,但使用正确的this
上下文:
Animal = function(name) {
// "this" will be your Chordate instance
this.name = name
}
答案 1 :(得分:0)
让我们假设您构建了一个动物:
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
}
}
答案 2 :(得分:0)
这只是对其他答案的补充,对评论来说太长了。
也许它可以帮助您理解new
运算符实际执行的操作:
var newInstance = new ConstructorFunction(arg1, arg2);
ConstructorFunction.prototype
:var newInstance = Object.create(ConstructorFunction.prototype);
ConstructorFunction
:ConstructorFunction.call(newInstance, arg1, arg2);
如果ConstructorFunction
继承自另一个"类",则必须调用其超级构造函数。这就是以下代码的作用:
function Parent () {
// this === newInstance
}
function Child () {
// this === newInstance
Parent.call(this); // call the super constructor
}
Child.prototype = Object.create(Parent.prototype);
var newInstance = new Child();
// or:
var newInstance = Object.create(Child.prototype);
Child.call(newInstance); // call the constructor, which calls the super constructor