該代碼是做三件事情:
- 使用對象文字語法創建對象實例
- 使用匿名函數表達式來創建函數和將它們綁定到對象上的屬性。 (函數是JavaScript中的第一類對象,因此您可以保留對它們的引用,傳遞引用等)
- 特別是,它覆蓋了兩個標準函數,即所有JavaScript對象都從
Object
原型繼承而來。
讓我們分析一下。
1)對象的文字符號:
var obj = {propName: propValue};
的{
在這種情況下}
表示一個對象常量。在對象文字中,您可以編寫propName: propValue
以將propValue
分配給對象上名稱爲propName
的屬性。這與以下內容相同:
var obj = {}; // Get an empty object
obj.propName = propValue; // Add a property to it
您可以使用逗號分隔多個屬性。例如:
var obj = {
author: "Douglas Adams",
title: "The Hitchhiker's Guide to the Galaxy",
answer: 42
};
這將創建一個具有三個屬性的對象,其中兩個具有字符串值,另一個具有數字值。
注意,右側被處理就像一個任務,所以可以是任何東西,可以在賦值語句的右邊出現:
var x = "bar";
var obj = {
three: 1 + 2,
fubar: "foo " + x
};
屬性名稱可放在報價,如果你喜歡:
var x = "bar";
var obj = {
"three": 1 + 2,
"fubar": "foo " + x
};
...這是非常方便的指定具有保留標記的名稱(如「如果」,或「返回」)屬性或以前,保留標記(如「階級」 )如果它們不在引號內,將會出現語法錯誤。
2)現在讓我們看一下函數表達式:
var f = function() { /* your code here */ };
這是一個函數表達式。它創建一個新函數並將其引用給變量f
。您可以致電f()
致電。
var f = function(name) {
alert("Hi " + name);
};
f("Fred"); // alerts "Hi Fred"
1 + 2),因此,與對象的文字符號將其組合在一起:
var obj = {
foo: function(name) {
alert("Hi " + name);
}
};
obj.foo("Fred"); // alerts "Hi Fred"
(我不喜歡匿名函數,I prefer my functions to have names,但那是另一個話題)
3)。最後:正如maerics指出的那樣,該代碼中使用的特定功能是toString
和toLocaleString
,這兩者都是JavaScript對象的標準功能。這意味着那些將覆蓋的標準版本,因此只要標準函數被調用就返回給定的值。
不能測試這個,所以我不完全確定,但我不調試這應該工作,應該是人[0] .toString()或人[1] .toString() – 2011-03-28 08:13:24
您的問題是有點不清楚給我。你想知道什麼?也許你應該看看'toString'文檔:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/toString – 2011-03-28 08:19:15
@Han在這裏你去:http://jsfiddle.net/yahavbr/MgMaP/ – 2011-03-28 08:32:40