要將size()
方法添加到Array
對象我這樣做:如何將「size」屬性添加到Javascript Array?
if (!Array.size) {
Array.prototype.size = function() {
return this.length;
};
}
有沒有一種簡單的方法來定義size
財產,將工作就像length
?
(我並不真的需要它,我只是想知道,如果這東西在Javascript中很容易實現。)
要將size()
方法添加到Array
對象我這樣做:如何將「size」屬性添加到Javascript Array?
if (!Array.size) {
Array.prototype.size = function() {
return this.length;
};
}
有沒有一種簡單的方法來定義size
財產,將工作就像length
?
(我並不真的需要它,我只是想知道,如果這東西在Javascript中很容易實現。)
與ES5這是可能的。添加在Array
原型size
財產,
Object.defineProperty(Array.prototype, "size", {
get: function() {
return this.length;
},
set: function(newLength) {
this.length = newLength;
}
});
var x = [1, 2, 3];
x.length // 3
x.size // 3
x.push(4);
x // [1, 2, 3, 4]
x.length // 4
x.size // 4
x.length = 2;
x // [1, 2]
x.size = 1;
x // [1]
它基本上可以作爲圍繞長度的包裝。看起來像一個肉眼看來的財產,但有一個潛在的功能支持。
感謝@ Matthew的評論,這size
屬性就像一個完整的長度包裝。
我會假設你已經知道這是不是一個真正的生活問題。
length
屬性被修改爲適合數組的大小,並通過諸如shift()
和pop()
等方法反映出來。
所以,你需要一種方法來獲得length
屬性。
if(!Array.size)
{
Array.prototype.__defineGetter__('size', function(){
return this.length;
});
}
var a = new Array();
a.push(1);
a.push(4);
console.log(a.size);
雖然我不完全確定跨瀏覽器友好是如何(至少應該在Chrome和FF上工作)。
非常優雅!謝謝! – 2011-05-03 02:46:21
+1很酷 – alex 2011-05-03 02:16:34
你也可以添加一個改變'this.length'的setter。 – 2011-05-03 02:17:37
@Matthew - 這是一個好主意,我只是想保持這個例子最小化。 – Anurag 2011-05-03 02:18:25