【问题标题】:Setting two properties equal in the declaration在声明中设置两个属性相等
【发布时间】:2011-05-12 00:34:53
【问题描述】:

我想在一个对象中设置两个相等的属性。这是一个例子:

var obj = { // I want to do something like this
    a: function() { ... },
    b: alert,
    c: a
};

显然这不起作用,我必须这样做:

var obj = {
    a: function() { ... },
    b: alert,
};
obj.c = obj.a;

有没有办法在声明中做到这一点?

【问题讨论】:

标签: javascript jquery object


【解决方案1】:
var obj = { 
    a: function() { alert("hello")},
    b: alert,
    c: function(){return this.a()}
};

obj.c();

正如 SLaks 所提到的,如果函数具有属性(例如,原型或 arguments.callee),这将不起作用。

【讨论】:

  • 如果函数具有属性(例如,prototypearguments.callee),这将不起作用。
【解决方案2】:

你可以先声明函数,然后和a & c一起使用:

function f() { ... }

var obj = {
    a: f,
    b: alert,
    c: f
};

【讨论】:

    【解决方案3】:

    您可以将值放入单独的变量中:

    var temp = function() { ... };
    var obj = { // I want to do something like this
        a: temp,
        b: alert,
        c: temp
    };
    

    但是,你不能做得比这更好。

    【讨论】:

      【解决方案4】:

      如果你想在对象初始化器中做所有事情,那么你可以让一个属性从另一个属性调用函数,并使用 Function.arguments 属性传递任何参数:

      var obj = { 
          a: function() { ... },
          b: alert,
          c: function() { return this.a(arguments); }
      };
      

      但是,最好的办法可能是先创建一个包含匿名函数的变量,然后将其值分配给对象初始化程序中的两个属性:

      var fn = function() { ... };
      var obj = {
          a: fn,
          b: alert,
          c: fn
      };
      

      你也可以这样做,但我会采用上面的方法:

      var obj = { b: alert };
      obj.a = obj.c = function() { ... };
      

      【讨论】:

        猜你喜欢
        • 2012-11-03
        • 1970-01-01
        • 1970-01-01
        • 2014-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多