我不太确定这里发生了什么,但简而言之,我已经看到了这个:
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
的方法。