javascript中的这个上下文错误-为什么';这不会触发一个错误吗?
我以为这会在使用关键字this从函数中调用函数时触发错误。运行Chrome37.0javascript中的这个上下文错误-为什么';这不会触发一个错误吗?,javascript,Javascript,我以为这会在使用关键字this从函数中调用函数时触发错误。运行Chrome37.0 S = function () { this.x = "test"; this.test1 = function () { console.log("test1"); this.test2(); }; this.test2 = function () { console.log(this); // output is s object
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();
将函数作为从对象属性获取函数引用的表达式的一部分来调用函数时,将
this
设置为从中获取属性的对象
因此,您的代码:
s.test1();
…将调用test1
设置此
等于s
引用的对象,因为该调用是从对象s
引用的属性获取test1
函数引用的表达式的一部分
然后在test1
中,执行以下操作时:
this.test2();
…它调用test2
设置this
等于this
引用的对象,因为调用是从this引用的对象的属性获取test2
函数引用的表达式的一部分
如果没有通过对象属性调用test1
或test2
,则会遇到设置不正确的this
问题,如下所示:
var f = s.test1;
f();
然后,在对test1
的调用中,这个
将是全局对象(在松散模式下)或未定义的
(在严格模式下)。将函数作为参数传递时也会发生同样的情况:
foo(s.test1);
如果foo
调用它的第一个参数所涉及的函数,我们会得到相同的结果(this
=全局对象或undefined
)
既然你没有这么做,那就不会发生
这里的关键是如何调用函数,而不是定义函数的位置(是否在另一个函数中)
更多关于此的信息,请点击这里,然后点击我的博客。Bug?哪只虫子?为什么您认为它应该“触发一个bug”?将“this”更改为全局对象而不是实际对象。如果您调用
this.test2()
(作为一种方法!),为什么上下文会成为全局对象?关于“函数中的函数”的任何内容都不会隐式触发对this
的更改。