因为b.bar
显示的原因undefined
是因为this
该foo
方法是prototype
,并且prototype
没有msg
属性。
你基本上错过了重点,继承。因此,这里重新访问了代码:
function A() {
this.msg = 'meuahah';
}
A.prototype.foo = function() {
alert(this.msg);
}
function B() {
A.call(this);
}
// Set the inheritance! Or better, the prototype's chain,
// so that any instance of B will have methods of A too
B.prototype = Object.create(A.prototype);
B.prototype.bar = function() {
// Because the inheritance, now B has the A's `foo` method too
this.foo();
}
// But... We can also override it.
B.prototype.foo = function() {
// do something
alert("override");
// then call the original one
A.prototype.foo.call(this);
}
希望它有助于更好地了解对象和构造函数。我建议也对Object.create进行调查,这真的很有帮助;和一般的 ES5 方法。
阅读Working with Objects这也是一个好的开始,即使它有点老了。