Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这是用AngularJS写的_Javascript_Angularjs - Fatal编程技术网

Javascript 这是用AngularJS写的

Javascript 这是用AngularJS写的,javascript,angularjs,Javascript,Angularjs,以Javascript中的代码段为例 var objt = { fn : function(three, four){ four(); // window as (this === window) } } objt.fn(3, function(){ alert(this);

以Javascript中的代码段为例

        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、鲁比和卡莫对我的帮助。