Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript新手关于继承不起作用的问题_Javascript - Fatal编程技术网

JavaScript新手关于继承不起作用的问题

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;

我的样品很简单。我有一个Person对象,它有两个属性--“name”和一个名为“sayName”的函数。我的目标是允许名为Woman的子类型继承它

以下是排序代码片段:

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
   } 
});