function Foo (name) {
this.name = name;
}
Foo.prototype.bar = {
n: function () {
// How to get here after initializing the object foo?
}
};
var a = new Foo('John');
console.log( a.bar.n() )
初始化对象foo后如何到达这里?
答案 0 :(得分:1)
为了让您了解实现这项工作需要什么,请参阅以下演示:
function Foo (name) {
this.name = name;
}
Object.defineProperty(Foo.prototype, "bar", {
get: function() {
var that = this;
return {
n: function () {
return that.name
}
}
}
});
var a = new Foo('John');
document.querySelector("pre").textContent = a.bar.n();

<pre></pre>
&#13;
bar
属性变成了一个getter,它创建并返回一个新对象,其新函数关闭this
值。
这意味着每次访问该属性时都会产生大量开销。这种技术是必要的,因为在访问属性时会发生对象和属性之间的唯一关系。在那之后,这段关系被遗忘了。
因此,原型继承的几乎所有好处都将丢失。这应该只考虑IMO用于学术目的。