收到一只叮咚
2019-03-21 18:15:16
以下這一段javascript中的callback是否有問題?/** * @author F * @description 用于與selectNull配合自動分析返回JSON數(shù)據(jù)生成select option值 * * @param ajaxUrl * @param subId * @param dftValue * @param IdKeyName * @param TxtKeyName * @param callbackFunc * @returns {boolean} */function selectChange(ajaxUrl, subId, dftValue, IdKeyName, TxtKeyName, callbackFunc) { var subObj = document.getElementById(subId); if (!subObj) { alert('不存在的子對象!'); return false; } $.getJSON(ajaxUrl, function (json) { subObj.options.length = 0; subObj.options[0] = new Option(' 請選擇 ', ''); subObj.options[0].className = 'dft-empty'; var j = 1; for (var i in json) { subObj.options[j] = new Option(json[i][TxtKeyName], json[i][IdKeyName]); j++; } if (dftValue) { subObj.value = dftValue; } if (callbackFunc) { callbackFunc(); } });}比如調(diào)用的代碼:#在 searchForm.init() 中調(diào)用(searchForm 有一個屬性 formObj )selectChange(this.jsonUrlAgent, this.formObj['AgentIdP'].id, this.filter['AgentIdP'], 'AGENTID', 'AGENTNAME', this.reqAgentIdI);#但是到了 searchForm.reqAgentIdI() 方法中 this.formObj的this卻變成了window了有另一個描述不太一樣的重復(fù)問題:javascript中this.formObj 傳遞不過去,變成了TypeError: this.formObj is undefined - SegmentFault
3 回答

江戶川亂折騰
TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個贊
因?yàn)?JavaScript 和 Python 不一樣。
當(dāng)你調(diào)用函數(shù) a.b()
時,在函數(shù) a.b
內(nèi) this
指向 a
。但是當(dāng)你不直接這樣調(diào)用時,比如 var c = a.b; c()
,JavaScript 看到 c
前邊沒有點(diǎn),因此不會將它作為方法對待,this
未定義(嚴(yán)格模式)或者指向 global 對象(瀏覽器中是 window
)。
你應(yīng)該使用 .bind
方法(其它語言中叫 curry、partial application)來處理方法作為值傳遞時帶來的問題: var c = a.b.bind(a); c()
。即先綁定第一個參數(shù)(即 this
)到對象本身,再傳來傳去。
參見:JavaScript’s “this”: how it works, where it can trip you up。
PS: 相同的問題不要問多次。

蠱毒傳說
TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個贊

長風(fēng)秋雁
TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個贊
添加回答
舉報
0/150
提交
取消