嵌套函数作为JavaScript中的方法调用

时间:2017-04-21 10:32:39

标签: javascript function methods nested this

我正在阅读JS Definitive Guide第6版,我遇到了这些问题:

  

与变量不同,this关键字没有范围,嵌套函数则没有   继承其调用者的这个值。如果作为方法调用嵌套函数,则调用它   此值是调用它的对象。如果嵌套函数作为函数调用   那么它的这个值将是全局对象(非严格模式)或未定义(严格)   模式)。

我理解的是,函数在严格模式下返回全局或未定义,因为这个'值。同样在方法中,这指的是调用该方法的对象。 从函数或方法调用的嵌套函数也有此对象在严格模式下引用全局或未定义。

举个例子:

var o = {                            // An object o.
    m: function() {                  // Method m of the object.
        var self = this;             // Save the this value in a variable.
        console.log(this === o);     // Prints "true": this is the object o.
        f();                         // Now call the helper function f().

        function f() {               // A nested function f
            console.log(this === o); // "false": this is global or undefined
            console.log(self === o); // "true": self is the outer this value.
        }
    }
};
o.m(); // Invoke the method m on the object o.

但我不明白的是:如果将嵌套函数作为方法调用,其值是上调用的对象。

你能给我一个例子,其中一个嵌套函数作为一个方法被调用,它的这个值引用了它被调用的对象吗?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,

function f() {               // A nested function f
            console.log(this === o); // "false": this is global or undefined
            console.log(self === o); // "true": self is the outer this value.
        }

在上面的代码中,this引用了window个对象。如果您希望this指向o对象本身,那么您应该使用apply, bind, or call

喜欢这个f.call(this)

答案 1 :(得分:0)

如果例如m方法返回另一个具有n方法的对象,您可以看到该方法中this的上下文是嵌套对象而不是父对象{{1}是未定义的。



this.a