[英]What is function with brackets mean?
有誰知道什么是test[name]
是什么意思?
function test(value){
copy(value||{},this);
}
test[name] = function(){
return "test"
}
用一個例子來解釋這個問題最簡單:
var name = "foo";
test[name] = function(){
return "test"
};
這會將一個名為“foo”的屬性添加到對象test
,該屬性的值是一個函數。 在這種情況下,對象test
實際上是一個函數並不重要,您可以像在JavaScript中的任何其他對象一樣為函數分配屬性。
您可以使用以下任何方法調用此函數:
test[name]()
test["foo"]()
test.foo()
請注意,如果將name
變量分配給不同的name
,則test[name]()
將不起作用,例如name = 'bar'
。
Javascript有兩組用於訪問對象的表示法,點表示法(obj.property)和括號表示法(object [property])。 有關MDN的更多信息。
test[name] = function (){}
為test
對象上的name
屬性指定一個匿名函數(它本身就是一個函數)。 在這種情況下(如注釋所述),變量name
用於訪問屬性。
起初這看起來有點奇怪,但記住在javascript中,函數是對象是有幫助的。
Javascript中的所有函數也是對象。 這會向test
函數對象添加一個屬性,其值為匿名函數。
例如:
function test(){
return "foo";
}
// test is a function, so it is also an object and
// it can have properties assigned to it
test.x = function(){
return "bar";
};
test(); // "foo"
test.x(); // "bar"
當然,就像任何對象一樣,您也可以使用括號表示法 :
var name = 'hello';
test[name] = function(){
return "HELLO!";
};
test.hello(); // "HELLO!"
在JavaScript中, 函數是對象 。 他們有財產。 test[name]
為函數設置一個屬性(命名為變量name
)。
當你有一個具有已定義屬性的javascript對象時,你可以使用點符號obj.property
或方括號符號obj[property]
訪問屬性,該屬性也可以是一個函數,所以如果你有一個對象:
var test = { foo : function(arg){ console.log(arg) }, bar : 'hello' };
你可以通過test['foo']('bar')
調用test.foo('bar')
這在迭代中或者當你不知道屬性的名稱將會是什么時特別有用。 例如:
var fun = 'foo';
test[fun]('hello world');
當然,你應該做適當的檢查,比如
if ('function'==typeof test['foo']){ test['foo']('bar'); }
另請注意,您可以像這樣執行檢查:
test[ fun || 'foo']('hello');
人們可以將對象視為關聯數組(也就是地圖,字典,散列,查找表)。 此數組中的鍵是對象成員的名稱
有兩種方法可以訪問對象成員:點表示法和括號表示法(也就是下標運算符)。
所以
test[name] = function (
意思是:有(如果一切正常)兩個對象: test
和name
(我們知道至少test
存在,因為你之前定義了一行: function test(value)
)
獲取test
對象(如果沒有測試object
,則會發生錯誤)。 然后使用從name
對象計算的密鑰訪問鍵/值對,並放置一個函數。
現在,如何從name
對象計算密鑰? 之前的同一頁面告訴我們:
屬性名稱必須是字符串。 這意味着非字符串對象不能用作對象中的鍵。 任何非字符串對象(包括數字)都通過toString方法進行類型轉換為字符串。
請注意,描述有點不對... test[null] == test["null"]
並test[undefined] == test["undefined"]
,所以也許真相就是像String(key).valueOf()
一樣的東西String(key).valueOf()
完成( String
函數將null
轉換為"null"
, undefined
為"undefined"
)
一些例子(其中=>表示“相當於,具有此值”)
var name = 'foo';
test[name] => test['foo']
var name = 123;
test[name] => test['123']
var name = 123.3;
test[name] => test['123.3']
var name = new Date();
test[name] => test['Wed Aug 14 2013 17:35:35 GMT+0200 (...)']
var name = null;
test[name] => test['null']
var name = undefined;
test[name] => test['undefined']
var name = [];
test[name] => test['']
var name = [1,2,3];
test[name] => test['1,2,3']
var name = {};
test[name] => test['object Object']
等等...
括號是如何通過鍵將屬性引用到javascript對象的哈希值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.