我已經在JavaScript中做了這樣的功能:有沒有辦法從方法中獲取此/上下文?
var syncCall = function(cb, obj, fn) {
var params = [];
for(var i=3; i< arguments.length; i++) {
params.push(arguments[i]);
}
fn.apply(obj, params)
.onReject(function(result){
console.error(result);
})
.onFulfill(function(result){
if(cb != undefined && cb != null) {
cb(result);
}
});
};
的問題是,我必須passs obj
PARAM到syncCall function, to set proper context of
這inside
fn`當它被調用。
在我的情況下,fn
始終是一個方法/函數,它存儲在obj
屬性之一中。因此通常在執行例如obj.myFunctionname()
時,myFunctionname
內的this
運營商參考obj
。我想知道,如果我能採取這個事實的冒險。意,具有fn
作爲參數來syncCall
時,採取某種方式的上下文(其爲obj
)並正確傳遞到apply()
用作第一參數
*這*是不是「背景」,它只是在通話或使用設置的參數*綁定*。如果你想調用* syncCall *作爲'obj.syncCall',這樣* this *內的函數是* obj *,然後將它添加到* Object.prototype *,所以你會做'obj.syncCall(cb,fn) '和'... fn.apply(this,param)...'。請注意,這樣做是不喜歡的,因爲它可以打破糟糕的寫入..循環。所以你可以有一個* Obj *構造函數並且有'Obj.prototype.syncCall'。 – RobG 2014-10-29 20:30:22
@RobG我已經試過這個你完全正確的地方。我試圖通過原型擴展的對象有一些for..in構造,並開始表現出意想不到的同時有新的屬性/函數asyncCall。因此,我選擇了'thesebas'提出的解決方案,下面是 – BartoszK 2014-10-30 20:14:20