我瞭解JavaScript的字典實現的一些問題和答案,但他們並不滿足我的要求:解決方法:JavaScript的解釋這需要對象作爲鍵
- 詞典必須能夠把對象作爲鍵
- 值必須是可訪問的[] - 運算符
所以我想出了主意,覆蓋在Object.prototype中的「的valueOf」 - 方法如下:
Object.__id__ = 0;
Object.prototype.valueOf = function() {
if(!this.__id__)
this.__id__ = ++Object.__id__;
return "__id__" + this.__id__;
}
Object.prototype.toString = Object.prototype.valueOf;
//test
var x = {p1: "5"};
var y = [6];
var z = {};
z[x] = "7";
z[y] = "8";
console.log(z[x], z[y]);
我用google-chrome測試了它,它似乎工作的很好,但我有點懷疑,這是否會造成一些缺點,因爲它很容易實現。
考慮到valueOf方法在整個代碼中沒有用於其他目的,你認爲有什麼缺點嗎?
我以前總是使用你的圖書館,它運作良好。但是目前我正在開發一個ActionScript 3 to Javascript轉換器。 AS3提供了一個詞典。如果我使用你的庫,我需要檢查類型並用get/set替換括號。如果我使用Object,valueOf不會出現在...中,但是如果我定義了一個新的「class」,它就會出現。 (也許這種行爲在其他瀏覽器中有所不同)。 因爲我不喜歡覆蓋Object.prototype.valueOf本身,你回答我的問題 – fishbone 2010-07-27 19:14:07