Javascript:需要帮助创建一个类似工厂的函数

Javascript: Need assistance with making a factory-ish function

本文关键字:一个 工厂 函数 帮助 创建 Javascript      更新时间:2023-09-26

我需要这样写

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

你已经在评论中得到了你的答案,所以这只是一个供参考:

您正在使用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是关键字"问题的一种常见方法。