我已经定义了一个辅助类来创建一些对象。 由于对象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说” - 哈哈! –