0

我正在编写模块化 JavaScript,并且我有一个特定的功能可以进行整个处理,即。绘制 2 个画布,更新大量变量并存储对象引用。现在我想执行另一个函数,它使用上面更新的一些变量。

像这样的东西:

  • 画布 - 将图像尺寸存储在变量中(以及许多其他东西)
  • 使用这些尺寸做一些数学和几何,再次更新画布!我不能在第一个函数中做这个数学运算,因为它是我用来绘制画布的常用实用函数,在我的代码中无处不在。

如果我在代码中注入 a setTimeout10 秒,一切正常,但没有它,上面的第二条指令找不到更新的变量,因此失败。

有什么办法可以解决这个问题?意思是,我只想在设置了一些必需的变量后才执行第二条指令。我说的是同步执行。

注意:我不能在这里(或任何地方)发布任何代码,因为我的工作场所不允许这样做!

4

2 回答 2

2

对于这种情况,我建议使用jQuery 和自定义事件。只需在第一个函数完成更新画布时发布一个事件。第二个功能(以及其他任何功能)可以监听这些事件并做任何他们想做的事情。

临:

  • 无耦合
  • 单个部件易于测试
  • 可扩展

缺点:

  • 需要 jQuery,否则您需要提取事件处理代码。
于 2013-09-11T15:16:19.123 回答
1

您可以使用 getter 和 setter 来监视给定条件。
在设置器中,您可以进行一些计算,检查是否满足某些条件并在需要时进行更新。

只是给你一个想法:

 // updateFunc is the function called whenever a property changes
 // and all conditions are met for an update.
 // newProp1,2,3 are the new values for prop1,2,3
 function MyStorageClass(updateFunc, newProp1, newProp2, newProp3 ) {
    this.updateFunc = updateFunc;
    this.prop1 = newProp1 ;
    this.prop2 = newProp2 ;
    this.prop3 = newProp3 ;
 }

 var MSCProto = MyStorageClass.prototype;

 // update is needed if all properties are >0
 MSCProto.checkUpdateRequired = function() {
   return ( ( this.prop1 > 0 ) && (this.prop2 > 0) && (this.prop3 > 0) )
 }

 Object.defineProperty(MSCProto, 'prop1', {  
        get : function() { retrurn this._prop1},
        set : function(x) { this._prop1 = x;  
                            // and some other computations if need be
                            if (this.checkUpdateRequired()) this.updateFunc(); } };

 Object.defineProperty(MSCProto, 'prop2', {  
        get : function() { retrurn this._prop2},
        set : function(x) { this._prop2 = x;  
                            // and some other computations if need be
                            if (this.checkUpdateRequired()) this.updateFunc(); } };      

 Object.defineProperty(MSCProto, 'prop3', {  
        get : function() { retrurn this._prop3},
        set : function(x) { this._prop3 = x;  
                            // and some other computations if need be
                            if (this.checkUpdateRequired()) this.updateFunc(); } };
于 2013-09-11T16:48:53.107 回答