JavaScript—在巢狀的內部函式中呼叫外部this的方法
阿新 • • 發佈:2019-02-20
在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
}
};