我已經定義了一個輔助類來創建一些對象。 由於對象A包含Bs,我試圖從createA調用createB,但是我得到一個「未捕獲的引用錯誤:createB未定義爲」。 JS是不是我的主要語言,所以請原諒我,如果這件事情明顯;)Javascript - 從另一個靜態方法訪問靜態方法拋出ReferenceError
這裏是我的代碼:
define([
"model/A",
"model/B",
"model/C"
], function (A, B, C) {
return {
addTo: function (params, key, target, source) {
if (params[key] !== undefined && params[key] !== null) {
target.set(key, params[key], source);
}
},
createA: function (params, source) {
var result = new A();
...
bDefs.forEach(function(bDef) {
result.get("bs").push(this.createB(params,source));
});
return result;
},
createB: function (params, source) {
var result = new B();
...
result.get("cs").push(createC(params,source));
return result;
},
createMediaType: function (params, source) {
var result = new C();
...
return result;
}
};
});
編輯:復讀的問題,我注意到我省略了一些重要的東西,可能是問題的原因:我從forEach中調用createB()。我猜想匿名函數沒有其他類的可見性。如何將這個的引用傳遞給forEach?
這是不行的SO編輯這樣的問題該編輯將使現有問題的答案無效,因此我已從您用編輯添加的createB調用中刪除了'this.'。作爲[algiogia說](http://stackoverflow.com/questions/37696799/javascript-accessing-static-method-from-another-static-method-throws-reference/37696945?noredirect=1#comment62869281_37696945),解決方案我的回答也涉及到「forEach」問題。我還更新了答案,向您展示如何使用'this'來實現'forEach'的工作。 –
@ T.J.Crowder我編輯了這個問題,因爲它是錯誤的。在SO中複製代碼我省略了相關部分。在我剛纔提到的初始版本中,我已經嘗試過使用「this.createB()」。你的回答仍然有效。 – algiogia
即使您錯誤地發佈了代碼,它也不適合修復它*一旦收到答案,它就會失效*。但是,正如你注意到的那樣,你最初的問題* *在最後關於'this.createB'(我錯過了!)有那麼一點,所以它不適用於這種情況。順便說一句,在我上面的評論中,我的意思是「正如jamiec所說的」不是「,因爲algiogia說」 - 哈哈! –