JavaScript新手关于继承不起作用的问题
我的样品很简单。我有一个Person对象,它有两个属性--“name”和一个名为“sayName”的函数。我的目标是允许名为Woman的子类型继承它 以下是排序代码片段:JavaScript新手关于继承不起作用的问题,javascript,Javascript,我的样品很简单。我有一个Person对象,它有两个属性--“name”和一个名为“sayName”的函数。我的目标是允许名为Woman的子类型继承它 以下是排序代码片段: function Person(name) { this.name = name; this.sayName = function() { console.log(this.name); }; } function Woman(name) { this.name = name;
function Person(name) {
this.name = name;
this.sayName = function() {
console.log(this.name);
};
}
function Woman(name) {
this.name = name;
}
Woman.prototype = Object.create(Person.prototype, {
constructor : {
enumerable: true,
configurable: true,
writable: true,
value: Woman
}
});
var woman = new Woman("Jane");
// I'M GETTING AN ERROR ON THIS LINE, SAYING UNDEFINED FUNCTION
woman.sayName();
现在我知道另一种方法是将sayName()函数附加到原型。但是根据我的阅读,JavaScript应该检查Woman对象自身的属性是否为“sayName”(它找不到),然后它会查看Woman对象的原型是否为“sayName”(它找不到)。然后它应该上升到Person对象,在它自己的属性中寻找“sayName”,它应该在那里找到它。但它似乎没有这样做
有人能告诉我我做错了什么吗
然后它应该上升到Person对象,在它自己的属性中寻找“sayName”,它应该在那里找到它
哪个Person
对象?您只将Person.prototype
插入Woman
的原型链,但是Person.prototype
也没有sayName
属性。您从未调用过Person
,因此Person
实例不可能存在
您忘记在子实例上调用父构造函数:
function Woman(name) {
Person.call(this, name);
}
然而,sayName
实际上应该在Person.prototype
上定义
function Person(name) {
this.name = name;
}
Person.prototype.sayName = function() {
console.log(this.name);
};
function Woman(name) {
Person.call(this, name);
}
Woman.prototype = Object.create(Person.prototype, {
constructor : {
enumerable: true,
configurable: true,
writable: true,
value: Woman
}
});
然后它应该上升到Person对象,在它自己的属性中寻找“sayName”,它应该在那里找到它
哪个Person
对象?您只将Person.prototype
插入Woman
的原型链,但是Person.prototype
也没有sayName
属性。您从未调用过Person
,因此Person
实例不可能存在
您忘记在子实例上调用父构造函数:
function Woman(name) {
Person.call(this, name);
}
然而,sayName
实际上应该在Person.prototype
上定义
function Person(name) {
this.name = name;
}
Person.prototype.sayName = function() {
console.log(this.name);
};
function Woman(name) {
Person.call(this, name);
}
Woman.prototype = Object.create(Person.prototype, {
constructor : {
enumerable: true,
configurable: true,
writable: true,
value: Woman
}
});