我需要这样的东西
function updateRender(ClassName){
if(!(this.currentRender instanceof ClassName)){
doPreprocessing();
this.currentRender = new ClassName();
doPostProcessing();
}
}
所以我可以用一个新的渲染对象调用updateRender,它可以是不同的类型。
updateRender( SolidRender );
updateRender( HollowRender );
updateRender( HollowRender ); //does nothing because currentRender is HollowRender
答案 0 :(得分:1)
你已经在评论中得到了答案,所以这只是一个FYI:
您正在使用this.currentRender
,如果该函数位于全局范围内,则将引用全局范围的变量。即到浏览器的window
对象。将事物放在全球范围内很少是一个好主意。
从技术上讲,您应该将所有代码放在一个命名空间中,甚至放在一个立即调用的函数中,这样它就不会污染全局范围。但是,您可以通过执行以下操作简单地将currentRender
变量从全局范围中取出:
var updateRender = (function () {
var currentRender = null;
return function (klass) {
doPreprocessing();
currentRender = new klass();
doPostProcessing();
};
}());
updateRender
函数仍然在全局范围内,但至少currentRender
变量被安全隐藏在闭包内,因此只有updateRender
可以更改它(也就是特权访问)
至于使用klass
代替Class
,这完全取决于您。使用klass
只是解决Ruby中“class
是关键字”问题的常用方法。