那里有两个问题:
首先,不能extends
用作函数名(除非您使用严格模式并且只在支持严格模式的环境中运行代码)。它是松散模式下的保留字。(目前未使用,也不太可能使用,但已保留。)
第二个也是更重要的是,您没有在任何地方调用 Parent
过,因此很自然地,该属性从未添加到对象中。您需要Parent
从内部调用Child
以获取它设置的内容,并且您需要this
在调用Parent
. 我们可以通过 来做到这一点Function#call
,它允许我们调用一个指定this
应该是什么的函数(在我们的例子中,我们希望它与对this
的调用相同Child
):
function Child (){
Parent.call(this);
}
因此,总的来说,删除不正确(但无害)的分号,并将extends
更改为未保留的内容,并且缩进保持一致,我们得到:
实时复制| 直播源
function extend(Child, Parent) {
var F = function(){};
F.prototype = Parent.prototype;
Child.prototype = new F();
Child.prototype.constructor = Child;
}
function Parent (){
this.cardArray=[];
}
function Child (){
Parent.call(this);
}
extend(Child, Parent);
var a = new Child();
console.log("typeof a.cardArray = " + typeof a.cardArray);
...显示“typeof a.cardArray = object”,这是正确的。
请注意,真正有效的 JavaScript 继承需要(目前)相当多的管道。你那里有很多,但不是全部。(例如,对父方法的调用很尴尬。)FWIW,我已经完成了一个非常小的名为的库,它可以为您完成所有工作。Lineage