似乎我终于理解了 JavaScript 继承以及它应该如何正确完成。这是我的代码:
function Human(eyes) {
this.eyes = eyes ? "Not blind" : "Blind";
}
Human.prototype.canSee = function () {
return this.eyes;
};
function Male(name, eyes) {
Human.call(this, eyes);
this.name = name;
}
Male.prototype = Object.create(Human.prototype);
var Sethen = new Male("Sethen", true);
console.log(Sethen.canSee()); //logs "Not blind"
据我了解,使用Object.create
创建原型对象进行继承比使用new
关键字好得多。这在我脑海中提出了几个问题。
- 在
Male.prototype = Object.create(Human.prototype)
原型链中会是Male.prototype --> Human.prototype --> Object.prototype --> null
什么? - 在
Male
我Human.call(this, eyes);
用来调用超类的构造函数中,我必须在构造函数中再次传递眼睛Male
才能将其传递给Human
构造函数。这似乎很痛苦,有没有更简单的方法可以做到这一点? - 为什么有时我会看到这样的代码
Male.prototype = new Human();
......这似乎是不正确的。当我们这样做时实际发生了什么?