我对(很可能)此的上下文有疑问: 我是JS的新手,更像是c ++家伙。 请查看代码:
controller.js :
function CController(){ ...
this.myCanvas = new CCanvas(this);
}
CController.prototype.resize() {...}
canvas.js :
function CCanvas(_mainController){
var controller = _mainController;
}
CCanvas.prototype.myEvent(){
this.controller.resize(); // <--- here!
}
我在提到的那行得到错误,即控制器未定义。 如何纠正?
答案 0 :(得分:1)
很可能不是范围界定问题。假设您的_mainController
实际上是一个控制器(我将在我要向您展示的版本中添加),那么您的问题是在CCanvas
的构造函数中,您是在分配var controller
,而不是this.controller
。反过来,这导致controller
被删除(毕竟var
是局部变量的关键字。
function CCanvas(_mainController){
if (!(_mainController instanceof CController)) throw "Not a controller";
this.controller = _mainController;
}
这应该有效。而且它可以防止您提供非控制器。
如果您确实想像注释中那样坚持下去,并且在类中将变量 not 保留在词法范围内,请执行以下操作:
var CCanvas = function(_mainController) {
var outputCCanvas = function(){
};
outputCCanvas.prototype.myEvent = function(){
console.log("Event");
}
return outputCCanvas;
};
此操作的间接级别太疯狂了,您为此失去了很多 ton 的东西:
instanceof
上进行CCanvas
检查是不可能的,因为每次调用该方法时,每个实例都是动态生成的new (CCanvas(_mainController))()
,因为CCanvas
现在是返回类的方法