Javascript 这是用AngularJS写的
以Javascript中的代码段为例Javascript 这是用AngularJS写的,javascript,angularjs,Javascript,Angularjs,以Javascript中的代码段为例 var objt = { fn : function(three, four){ four(); // window as (this === window) } } objt.fn(3, function(){ alert(this);
var objt = {
fn : function(three, four){
four(); // window as (this === window)
}
}
objt.fn(3, function(){
alert(this); // window as (this === window)
});
上述函数不是构造函数。在函数内部,this的值取决于函数的调用方式。功能
function(){
alert(this);
}
作为参数传递,因此未链接到objt。此没有问题
现在考虑AngularJS中关于模块和控制器的片段,
myModule.controller('MainCtrl', function(x1, x2) {
var main = this;
alert(this === window); // alert false, why and what is this here?
});
通常
这是一个棘手的问题,内部取决于您所处的范围。如果在全局范围内声明函数,此
将等于窗口
,因为窗口
是全局范围
但是,由于您在角度上处于控制器范围内,此
不再引用窗口
对象,因此它成为您的控制器对象。它可能是控制器本身或$scope检查,这也建议阅读。请注意,此
可以通过函数.prototype.call()更改为任何内容
(或其他)。感谢evc、鲁比和卡莫对我的帮助。