javascript原型对象这个值

时间:2016-05-07 08:07:04

标签: javascript prototype this

我真的没有进行JavaScript原型设计。在下面的示例中,为什么tmp.foo.tt()的输出未定义,以及如何定义它?

function Test(){
    this.name = 'test'
}
Test.prototype.foo = {
    tt: function(){
        console.log(this.name)
    }
} 

var tmp = new Test();
tmp.foo.tt()    //why the output is undefined, and how to change it

1 个答案:

答案 0 :(得分:1)

你可以使用getter解决这个问题,虽然你会失去原型通常提供的一些优点:

function Test(){
    this.name = 'test'
}
Object.defineProperty(Test.prototype, 'foo', {
    get: function() {
        var that = this;
        // that is now this
        return {
            tt: function(){
                console.log(that.name);
            }
        }
    },
    configurable: true,
    enumerable: true
});

var tmp = new Test();
tmp.foo.tt();