代码之家  ›  专栏  ›  技术社区  ›  31113

增量更改每个函数作为变量运行

  •  0
  • 31113  · 技术社区  · 6 年前

    我找到了简单的解决方案 here 使用 closure @Xotic750

    但是,是否可以在不使用圆括号的情况下运行函数? 例如。 :

    var increment = new Increment()
    
    console.log('value: ' + increment) // value: 1
    console.log('value: ' + increment) // value: 2
    console.log('value: ' + increment) // value: 3
    

    每次函数运行我都得到了 功能 作为 [object Object] 在里面 console.log 而不是 value :

        var Increment = (function(n) {
          return function() {
            n += 1;
            return n;
          }
        }(0)); 
    
        var increment = new Increment();
    
        console.log('value: ' + increment) // value: [object Object]
        console.log('value: ' + increment) // value: [object Object]
        console.log('value: ' + increment) // value: [object Object]
    
    3 回复  |  直到 6 年前
        1
  •  2
  •   trincot Jakube    6 年前

    当你打印 increment 实例,有一个 toString 转换正在发生。您可以使用它来执行增量:

    var Increment = (function(n) {
      var f = function() {}; // Only serves as constructor
      f.prototype.toString = function() {
        n += 1;
        return n;
      }
      return f
    }(0)); 
    
    var increment = new Increment();
    
    console.log('value: ' + increment) // value: 1
    console.log('value: ' + increment) // value: 2
    console.log('value: ' + increment) // value: 3    

    注意,这个柜台有点全球化。如果要将计数器分开,并为每个实例从0重新启动,请使用 this :

    var Increment = (function(n) {
      var f = function() {
          this.n = 0;
      };
      f.prototype.toString = function() {
        this.n += 1;
        return this.n;
      }
      return f
    }(0)); 
    
    var increment = new Increment();
    
    console.log('value: ' + increment) // value: 1
    console.log('value: ' + increment) // value: 2
    console.log('value: ' + increment) // value: 3
    
    increment = new Increment();
    
    console.log('value: ' + increment) // value: 1
    console.log('value: ' + increment) // value: 2
    console.log('value: ' + increment) // value: 3
        2
  •  1
  •   Ben    6 年前

    您正在创建函数的对象 Increment 通过使用 new 关键字。在您的情况下,您只需调用 增量 功能如下:

    console.log('value: ' + Increment());
    console.log('value: ' + Increment());
    console.log('value: ' + Increment());
    

    在上查看此链接 Closures 关于它们如何工作的更详细的解释。

        3
  •  1
  •   Titus    6 年前

    可以不带圆括号运行函数吗

    是的,您可以使用 getter ,下面是一个示例:

    class Cls {
       constructor() {
          this.value = 0;
       }
       get increment() {
          return this.value++
       }
    }
    
    const cls = new Cls()
    
    console.log('value: ' + cls.increment)
    console.log('value: ' + cls.increment)
    console.log('value: ' + cls.increment)