4

首先,请参阅我的代码。

function test(){

    this.item = 'string';

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

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

我上课并调用'exec函数',就像这段代码

var t = new test();

t.exec();

但结果是...

undefined
string

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

你有什么解决办法吗?

4

4 回答 4

6

您需要调用somethingwithapply以便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()创建的对象。您可以在此处阅读有关它的更多信息,但一般规则是:

如果在 an 上调用函数object,则this引用该object。如果一个函数被自己调用(就像您的代码中的情况),则this引用全局对象,在浏览器中是window.

于 2013-10-02T06:09:53.073 回答
2

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

var item = 'string'

或者

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

或者

var that = this;
function something(){
    console.log(that.item);
    console.log('string');
}
于 2013-10-02T06:10:46.480 回答
2

this.iteminsomething()不是你想的那样。

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();
    }
}
于 2013-10-02T06:10:58.407 回答
1

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

小提琴

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
于 2013-10-02T06:43:24.460 回答