我认为这是假设在使用关键字this从函数内调用函数时触发错误。运行Chrome 37.0
S = function () {
this.x = "test";
this.test1 = function () {
console.log("test1");
this.test2();
};
this.test2 = function () {
console.log(this); // output is s object, thought 'this' suppose to be global?
console.log("test2");
};
};
s = new S();
s.test1();
编辑:
我把它与这段代码混在一起:
s = function () {
console.log(this);
var t = function () {
console.log(this);
};
t();
};
x = new s();
答案 0 :(得分:1)
将函数作为表达式的一部分调用,从对象属性获取函数引用,将函数调用this
设置为您获取属性的对象。
所以你的代码:
s.test1();
...将调用test1
设置this
等于s
引用的对象,因为该调用是表达式的一部分,从{a}}获取test1
函数引用对象s
上的属性是指。
然后在test1
,当你这样做时:
this.test2();
...它调用test2
设置this
等于this
引用的对象,因为调用是从{a}获取test2
函数引用的表达式的一部分对象this
上的属性是指。
如果没有 通过对象调用this
或test1
,那么test2
未正确设置会遇到问题财产,像这样:
var f = s.test1;
f();
然后,在test1
的调用中,this
将是全局对象(在松散模式下)或undefined
(在严格模式下)。将函数作为参数传递时会发生同样的事情:
foo(s.test1);
如果foo
调用与其第一个参数相关的函数,我们得到相同的东西(this
=全局对象或undefined
)。
既然你没有这样做,那就不会发生。
这里的关键是如何调用函数,而不是它定义的位置(在另一个函数内部)。
有关How Does The this
Keyword Work?的this
的详情,请点击此处,以及我博客上的Mythical methods和You must remember this
。