【问题标题】:how to clone objects javascript webpack如何克隆对象 javascript webpack
【发布时间】:2017-05-22 03:57:20
【问题描述】:
    //bootstrap.js
    window.numToRubles = require('./custom/rubles');

    //in rubles.js
    (function() {
         var rubles = function(number, template) {
            ....
            return text;
         }

    globals.rubles = rubles;

    })();

正常工作

    //in app.js
    numToRubles.rubles(val, {nominal:true, div:true, dat:false});

但如果我在其他通话中更改某些选项

    //in app.js
    numToRubles.rubles(val, {nominal:true, div:true, dat:false});
    numToRubles.rubles(val, {nominal:true, div:false, dat:true});

会对第一个值产生影响

我尝试在

中克隆对象
    //bootstrap.js
    window.numToRubles  = require('./custom/rubles');
    window.numToRubles2 = window.numToRubles = jQuery.extend(true, {}, window.numToRubles);

    //in some.js
    numToRubles.rubles(val, {nominal:true, div:true, dat:false});
    numToRubles2.rubles(val, {nominal:true, div:false, dat:true});

但它不起作用。它具有相同的行为。

现在,我强迫它像这样工作:

    window.numToRubles  = require('./custom/rubles');
    window.numToRubles2 = require('./custom/rubles2');

但这是不好的方式。

我怎样才能正确地做到这一点?

【问题讨论】:

    标签: javascript webpack vue.js


    【解决方案1】:

    尝试以下操作:

    window.numToRubles  = require('./custom/rubles');
    window.numToRubles2 = window.numToRubles.bind({}); 
    //clones the function with '{}' acting as it's new 'this' parameter
    

    现在

    //in some.js
    numToRubles.rubles(val, {nominal:true, div:true, dat:false});
    numToRubles2.rubles(val, {nominal:true, div:false, dat:true});
    

    【讨论】:

    • 不,它不适合我。 window.numToRubles2 = window.numToRubles.bind({}); //window.numToRubles.bind 不是函数。如果我设置 window.libRub = require('./custom/rubles'); window.numToRubles = window.libRub.rubles.bind({}); window.numToRubles2 = window.libRub.rubles.bind({});同样的影响
    【解决方案2】:

    我将 rubles.js 改写为课堂风格

    //in rubles.js
    (function() {
    
      //var somePar = [....];// and I transferred this property to the class
                            // I suppose that the manipulation of this array 
                            // led to a negative result before
    
    
    
        //add the constructor
         var Rubles = function(template) {
    
            var s = this;
    
            s.somePar = [....];
    
            s.getRes(n){
                ...
                return n;
            }
    
         }
    
    
    globals.Rubles = Rubles;
    
    })();
    

    什么时候

      window.Rubles = require('./custom/rubles');
    
      window.numToRubles = new window.Rubles.Rubles({nominal:true, div:true, dat:false});
      window.numToString = new window.Rubles.Rubles({nominal:false, div:false, dat:true});
    
      res1 = numToRubles.getRes(n);
      res2 = numToString.getRes(n);
    

    效果很好

    【讨论】:

      猜你喜欢
      • 2013-01-03
      • 2011-12-19
      • 2010-10-18
      相关资源
      最近更新 更多