如何访问私人方法'在Javascript类中使用公共变量'

时间:2013-10-02 06:06:29

标签: javascript html5

首先,请参阅我的代码plz。

function test(){

    this.item = 'string';

    this.exec = function(){
        something();
    }

    function something(){
        console.log(this.item);
        console.log('string');
    }
}

我上课并致电' exec function',就像这段代码一样

var t = new test();

t.exec();

但结果是......

undefined
string

我想从某个功能访问test.item。

你有解决方案吗?

4 个答案:

答案 0 :(得分:6)

您需要使用apply致电something,以便在this内正确设置something

function test(){

    this.item = 'string';

    this.exec = function(){
        something.apply(this);
    }

    function something(){
        console.log(this.item);
        console.log('string');
    }
}

正如@aaronfay指出的那样,这是因为this没有引用new test()创建的对象。您可以阅读更多相关信息here,但一般规则是:

如果在object上调用了某个功能,则this会引用该object。如果函数自己调用(如代码中的情况),则this引用全局对象,在浏览器中为window

答案 1 :(得分:2)

你有很多选择,但我推荐最后一个。

var item = 'string'

this.exec = function(){
    something.apply(this, []);
}

var that = this;
function something(){
    console.log(that.item);
    console.log('string');
}

答案 2 :(得分:2)

this.item中的{p> something()不是您认为的那样。

this值不同。在这种情况下,它是全局对象。

在我看来,最好的解决方案是声明一个引用this的变量,可以在内部函数中访问。


function test() {
    var that = this; // a reference to 'this'

    function something() {
        console.log(that.item); // using the outer 'this'
        console.log('string');
    }

    this.item = 'string';

    this.exec = function(){
        something();
    }
}

答案 3 :(得分:1)

为什么不定义这样的东西:

Fiddle

function test(){

    this.item = 'string';

    this.exec = function(){
        this.something();
    }

    this.something = function(){
        console.log(this.item);
        console.log('string');
    }
} 

var t = new test();
t.exec();
// output:
// string 
// string