2014-02-27 27 views
2

我真的不知道這是怎麼回事,但是簡單地說我已經看到了這一點:這是什麼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工作),這是行不通的。

+0

'OBJ [鍵]'是一個函數,這個調用該函數通過在'value'作爲參數。 –

+0

功能在JavaScript對象,並且可以存儲像一個普通的對象。 –

+0

感謝球員,這真的清除它。我會盡快將問題標記爲解決問題。 – cloying

回答

3

Object是一個JavaScript對象,你可以聲明如下:

var obj = {}; 

然後屬性創建(他的名字包含在key變量)的函數作爲其值:

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

所以現在,你有一個函數存儲在'myfunction'鍵中的對象'obj'中。

因爲它是你把它用execute '()' 功能,這將導致:

obj['myfunction']() 
0

也許只是一個黑客做這樣的事情:

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

所以你調用一個方法create與參數prop

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


相關問題