Dim*_*tri 4 javascript inheritance prototype
我是Javascript的新手,我刚刚在codeAcademy完成了很长的Javascript课程.我有一些问题prototype.据我所知,prototype它主要用于继承,也可以动态定义对象的方法.
但我还是有一些问题.看看我的代码.我使用原型toString在对象Animal和另一个中定义了一个toString.当我运行它时,它显示为什么:[Object] Dumbo 4而不是[Proto] Dumbo 4?
function Animal(name, numLegs){
this.name = name;
this.numLegs = numLegs;
this.toString = function(){
return "[Object]" + this.name + " " + this.numLegs + "\n";
};
}
Animal.prototype.toString = function(){
return "[Proto]" + this.name + " " + this.numLegs + "\n";
};
var animal = new Animal("Dumbo", 4);
console.log(animal.toString());
Run Code Online (Sandbox Code Playgroud)
JavaScript是一种原型的面向对象的编程语言,它只是意味着对象继承自其他对象.在JavaScript中,当在对象上找不到属性时,解释器会尝试在对象的原型链中找到它.如果在对象的原型链中找不到该对象,则解释器返回undefined:
null
^
| [prototype]
|
+------------------+
| Object.prototype |
+------------------+
^
| [prototype]
|
+------------------+
| Animal.prototype |
+------------------+
^
| [prototype]
|
+------------+
| new Animal |
+------------+
Run Code Online (Sandbox Code Playgroud)
如你所见,var animal = new Animal("Dumbo", 4)继承自Animal.prototype.因此,当您调用animal.toString()它时,它将执行Animal构造函数中定义的函数.如果你delete animal.toString然后打电话,animal.toString那么它会打电话Animal.prototype.toString.
阅读以下博客文章,了解有关JavaScript中原型继承的更多信息:为什么原型继承很重要