1. 程式人生 > >JavaScript—在巢狀的內部函式中呼叫外部this的方法

JavaScript—在巢狀的內部函式中呼叫外部this的方法

在javascript中經常出現函式中巢狀函式的情況。尤其是在物件函式中巢狀的函式,往往需要呼叫外部函式(物件函式)的this。

var obj = {
    val : 1,
    outShow : function(){
        (function(){
            alert(this.val);//這裡的this並不指向obj,不能彈出1
         })();
    }
};

解決方法:

一.

由於在內部函式中將外部物件(obj)的this同名覆蓋了,如果預先將外部的this儲存在一個不會被覆蓋的量中,便可在內部函式中直接使用。

var
obj = { val : 1, outShow : function(){ var that = this; (function(){ alert(that.val); })(); } };

二.

使用call,apply,bind進行this繫結。

var obj = {
    val : 1,
    outShow : function(){
        var innerFunc = function(){ alert(this.val);};
        innerFunc.bind(this
)(); //彈出1 innerFunc.call(this); //彈出1 innerFunc.apply(this); //彈出1 } };