这个JavaScript表示法做了什么:Object [key](value)

时间:2014-02-27 17:50:09

标签: javascript

我不确定这里发生了什么,但简而言之,我已经看到了这一点:

Object[key](value);

bootstrap-datetimepicker的第1088行:

  $.fn.datetimepicker = function ( option, val ) {
    return this.each(function () {
      var $this = $(this),
      data = $this.data('datetimepicker'),
      options = typeof option === 'object' && option;
      if (!data) {
        $this.data('datetimepicker', (data = new DateTimePicker(
          this, $.extend({}, $.fn.datetimepicker.defaults,options))));
      }
      // Line below:
      if (typeof option === 'string') data[option](val);
    });
  };

有人能够回答正在发生的事情吗?

我想也许它是将值赋给对象中的键但是当我在开发者控制台中尝试做类似的事情时(在chrome v.33中工作)它不起作用。

4 个答案:

答案 0 :(得分:3)

Object是一个Javascript对象,您可以这样声明:

var obj = {};

然后创建一个属性(其名称包含在key变量中),并将一个函数作为其值:

var obj['myfunction'] = function() { alert('Hello!'); };

现在,您在'myfunction'键中的对象'obj'中存储了一个函数。

因为它是一个函数,你使用'()'执行它,结果是:

obj['myfunction']()

答案 1 :(得分:1)

var property = 'method';
// multiple ways to access properties
object.method === object['method'] === object[property];
// and you can use any syntax to call the method
// These all call `object.method`:
object.method() === object['method']() === object[property]();

另见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Member_Operators

答案 2 :(得分:1)

要在JavaScript中访问对象的属性,您可以使用点表示法。即:Object.property或字符串表示法(也称为括号表示法)Object[property]

两者都有效,但点符号不适用于包含空格的属性名称,例如Object.property name无效,而Object['property name']有效。

根据您的示例,Object[key](value)您正在访问一个属性,该属性的名称存储在key对象的Object中。该属性恰好是一种方法,您可以通过value作为参数执行它。

想象一下这个对象看起来像这样:

Object = {
    myProp: function(newValue){
        // do something with newValue
    }
}

如果方法名称存储在变量中,则使用字符串表示法调用它是完全可以的:

var key = 'myProp';
Object[key](value);

或者如果您不需要变量,您也可以使用点表示法直接调用它:

Object.myProp(value);

资源:MDN on Property Accessors


答案 3 :(得分:0)

也许只是一个黑客做一些像:

var method = "create";
var prop = new String();
var str = Object[method](prop);

因此,您使用参数create调用方法prop