我是Node / Javascript世界的新手。我已经浏览了很多关于javascript中继承是如何工作的博客,但我仍然有些困惑。
以下是我设置的示例。
var Mammal = function() {
this.prop1 = "test1";
}
Mammal.prototype.greet = function(){
console.log("Hello Word "+ this.prop1);
}
var Animal = function(){
Mammal.call(this);
this.prop2 = "test2";
}
Animal.prototype = Mammal.prototype;
//Animal.prototype = Object.create(Mammal.prototype);
var a = new Animal();
a.greet();

我不确定
Animal.prototype = Mammal.prototype;
和
Animal.prototype = Object.create(Mammal.prototype);
甚至是Animal.prototype = new Mammal();
设置继承的正确方法是什么?两者的工作方式相似。 任何人请帮助我理解两者之间的区别。
答案 0 :(得分:1)
正确的方法是将Animal的原型设置为另一个对象,该对象是从Mammal创建的,而不是直接设置为该Mammal。设置原型后,还要设置Animal的构造函数。
为什么要使用其他对象?
因为有不同的对象。设置Animal.prototype = Mammal.prototype
时,这意味着您引用同一个对象。对于Animal
,构造函数将是Mammal
函数,这是不正确的。因此,我们创建另一个对象,它接受Mammal prototypes
属性和函数,并且该对象现在是不同的。毕竟,我们将该对象的构造函数设置为Animal
,因此每个Animal的构造函数都将是Animal
函数。
请参阅第一种方法。 Animal和Mammal返回错误的构造函数。
var Mammal = function() {
this.prop1 = "test1";
}
Mammal.prototype.greet = function(){
console.log("Hello Word "+ this.prop1);
}
var Animal = function(){
Mammal.call(this);
this.prop2 = "test2";
}
Animal.prototype = Mammal.prototype;
Animal.prototype.constructor = Animal;
var a = new Animal();
console.log(a.constructor);
var m = new Mammal();
console.log(m.constructor);
这是正确的方法
var Mammal = function() {
this.prop1 = "test1";
}
Mammal.prototype.greet = function(){
console.log("Hello Word "+ this.prop1);
}
var Animal = function(){
Mammal.call(this);
this.prop2 = "test2";
}
Animal.prototype = Object.create(Mammal.prototype);
Animal.prototype.constructor = Animal;
var a = new Animal();
console.log(a.constructor);
var m = new Mammal();
console.log(m.constructor);