首先,请参阅我的代码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。
你有解决方案吗?
答案 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)
为什么不定义这样的东西:
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