Javascript:需要帮助创建一个类似工厂的函数
Javascript: Need assistance with making a factory-ish function
我需要这样写
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
是关键字"问题的一种常见方法。
相关文章:
- 返回一个新函数,而不是工厂中的对象
- Jasmine测试工厂函数调用本地函数和另一个函数-获取错误:应该是间谍,但得到了function
- 这是一个新的javascript工厂模式吗
- Angular,设置一个回调函数,用于在工厂和控制器之间更新
- 在AngularJS建立一个工厂而不是Singleton
- 需要将服务/工厂存储为一个值
- jasmine 2.0测试angularjs的工厂方法,这是一个承诺
- 你如何嘲笑一个 angularjs $resource工厂
- 将一个 Angular 工厂注入另一个工厂
- 在另一个 AngularJS Ionic 中调用一个工厂
- 访问angularjs中另一个模块中定义的工厂
- 如何使用getter和setter方法创建一个Angular工厂而不遇到竞争条件
- 茉莉:我怎么能声明一个循环'其'而不是'期望'用于测试有角度的工厂
- 在一个工厂中组合多个返回语句
- Ionic Angular Js的工厂服务,工厂有另一个工厂
- 在AngularJS中,如何让一个工厂函数引用另一个工厂函数?
- 用来自Neo4j服务器的JSON数据在Angular中创建一个工厂
- 你能在Angular中从一个工厂中创建多个服务吗?
- AngularJS$范围在一个工厂
- 不能模拟调用另一个工厂方法的工厂方法