以下javascript代码允许您访问全局对象(窗口/工作者)。
(new function Outer(){
console.log(this); /* The object */
(function(){ // This function could be a 3rd Party function
console.log(this); /* window !!*/
})();
});
有没有办法可以确保内部总是能够引用外部的上下文。
我知道我能做到
(new function Outer(){
'use strict';
console.log(this); /* The object */
(function(){ // This function could be a 3rd Party function
console.log(this); /* undefined ? !!*/
})();
});
但这会导致this
未定义。
修改
我知道bind
,但如果内部函数是嵌套的,那该怎么办呢?例如
(function(){
(function(){
(function(){
console.log(this);// undefined
})();
})();
}).bind(this)();
我想要的是:外{} 而不是使用变量引用外部: - |
答案 0 :(得分:7)
您可以使用function.call。
new function Outer(){
'use strict';
console.log(this);
(function(){ // This function could be a 3rd Party function
console.log(this); //<-- Now it will it the one from the outer scope
}).call(this);
}; // You don't need to invoke this explicitly here with () since you are invoking it already with new keyword so constructor invocation doesnt need ()
或者最好的选择是将外部缓存在外部并在内部范围内的任何位置使用它。
new function Outer(){
'use strict';
var self = this;
console.log(this);
(function(){ // This function could be a 3rd Party function
console.log(self); //<-- Now it will it the one from the outer scope
})();
};
答案 1 :(得分:1)
您可以使用闭包变量:
(new function Outer(){
'use strict';
console.log(this);
var me = this;
(function(){
console.log(me);
})();
})();
答案 2 :(得分:1)
这个技巧只是将“外部”this
存储在一个变量中,你可以从内部函数(以及内部函数等)访问它。
在某些情况下,这可能很有用,因为您可以访问内部this
(如果有上下文)和外部this
。
(new function Outer(){
'use strict';
console.log(this); /* The object */
var _this = this;
(function(){ // This function could be a 3rd Party function
console.log(_this); /* The outer object */
})();
})();