这个JavaScript符号做什么:Object[key](value)



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

Object[key](value);

在引导日期时间选择器的第 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中工作)时,它不起作用。

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

var obj = {};

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

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

所以现在,你有一个函数存储在你的对象'obj'的'myfunction'键中。

由于它是一个函数,因此您可以使用"()"执行它,结果是:

obj['myfunction']()
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

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

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

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

想象对象看起来像这样:

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

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

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

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

Object.myProp(value);

资源:属性访问器上的 MDN


也许只是一个黑客来做这样的事情:

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

因此,您调用了一个带有参数prop create的方法。

最新更新