Coe*_*oen 24 javascript this anonymous-function
任何人都可以向我解释为什么A是真的并且B是假的?我本以为B也是如此.
function MyObject() {
};
MyObject.prototype.test = function () {
    console.log("A", this instanceof MyObject);
    (function () {
        console.log("B", this instanceof MyObject);
    }());
}
new MyObject().test();
Ada*_*kis 32
你的匿名函数里面this是全局对象.
在里面test,这是MyObject调用该方法的实例.
每当你调用这样的函数时:
somceFunction(); // called function invocation
this是永远全局对象,或undefined在严格模式下(除非someFunction与创建bind** -见下文)
每当你调用这样的函数时
foo.someMethod();  //called method invocation
this 被设置为 foo
** EcmaScript5定义了一个bind函数,允许您创建一个具有预设值的函数this
所以这
    var obj = { a: 12 };
    var someFunction = (function () { alert(this.a); }).bind(obj);
    someFunction();
导致someFucntion与被调用this等于obj和警报12.我提起这事,唯一要注意的是,这是一个潜在的例外,我提到关于援引为函数的规则
someFunction();
总是this等于全局对象(或undefined严格模式)
Cam*_*ron 19
this很特别.它指的是代表函数被调用的对象(最常见的是通过点语法).
因此,在这种情况下A,代表新MyObject对象调用该函数.B是在一个不代表任何对象显式调用的不同函数中,因此this默认为全局对象(window).
换句话说,this更改取决于函数的调用方式,而不是定义的位置和方式.您使用匿名函数(在另一个函数中定义)的事实是巧合的,并且对值没有影响this.
在匿名函数中,this绑定到全局对象(window在浏览器环境中).
有多种方法可以访问实例:
var self = this;
(function () {
    console.log("B", self instanceof MyObject);
}());
要么
(function () {
    console.log("B", this instanceof MyObject);
}).call(this);
| 归档时间: | 
 | 
| 查看次数: | 21028 次 | 
| 最近记录: |