初始化后获取原型对象的属性

时间:2015-06-17 23:06:52

标签: javascript

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后如何到达这里?

1 个答案:

答案 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;
&#13;
&#13;

bar属性变成了一个getter,它创建并返回一个新对象,其新函数关闭this值。

这意味着每次访问该属性时都会产生大量开销。这种技术是必要的,因为在访问属性时会发生对象和属性之间的唯一关系。在那之后,这段关系被遗忘了。

因此,原型继承的几乎所有好处都将丢失。这应该只考虑IMO用于学术目的。