有沒有辦法複製全局對象(Array,String ...),然後在不影響原始對象的情況下擴展副本的原型?我試着這樣:在javascript中複製和擴展全局對象
var copy=Array;
copy.prototype.test=2;
但是,如果我檢查Array.prototype.test
,因爲數組對象是按引用傳遞是2。我想知道是否有辦法讓「複製」變量的行爲像一個數組,但可以在不影響原始數組對象的情況下進行擴展。
有沒有辦法複製全局對象(Array,String ...),然後在不影響原始對象的情況下擴展副本的原型?我試着這樣:在javascript中複製和擴展全局對象
var copy=Array;
copy.prototype.test=2;
但是,如果我檢查Array.prototype.test
,因爲數組對象是按引用傳遞是2。我想知道是否有辦法讓「複製」變量的行爲像一個數組,但可以在不影響原始數組對象的情況下進行擴展。
好問題。我有一種感覺,你可能不得不爲此編寫一個包裝類。你基本上用copy.prototype.test=2
做的是設置一個類的原型,當然這個類的原型對於該類的所有實例都是可見的。
你有包裝類的例子嗎? – mck89 2010-03-02 13:32:49
@ mck89:對不起,我沒有注意到你在這裏的評論。 S.O.的通知功能需要一些工作,哈哈。我把它設法得到一個包裝類的排序? – Codesleuth 2010-03-04 09:38:44
是的,我發現http://dean.edwards.name/weblog/2006/11/hooray/ – mck89 2010-03-04 17:30:10
而不是擴展原型,爲什麼不簡單擴展副本變量。例如,添加一個功能
copy.newFunction = function(pParam1) {
alert(pParam1);
};
上的東西因爲這樣如果我創建一個新的副本實例它不會有方法,因爲它會採取只有原型方法。無論如何,這並不能解決問題,因爲它也擴展了原始的Array對象。 – mck89 2010-03-02 13:38:22
我覺得在http://dean.edwards.name/weblog/2006/11/hooray/的例子不工作的原因是因爲它是一個匿名函數。所以,不要使用以下:
// create the constructor
var Array2 = function() {
// initialise the array
};
// inherit from Array
Array2.prototype = new Array;
// add some sugar
Array2.prototype.each = function(iterator) {
// iterate
};
你想是這樣的:
function Array2() {
}
Array2.prototype = new Array();
從我自己的測試中,length
性能維持在IE中使用這種繼承。此外,添加到MyArray.prototype
的任何內容都不會添加到Array.prototype
。希望這可以幫助。
我假設第一行實際上是:'var copy = Array;' – 2010-03-02 12:02:53
對不起,我已經更新了它 – mck89 2010-03-02 13:30:10
要創建一個類似數組的類,請參閱http://stackoverflow.com/questions/366031/implement -array-like-behavior-in-javascript-without-using-array 這似乎也是你不明白JavaScript的繼承。你應該像Google的東西一樣「Javascript原型繼承」。 – 2010-03-03 00:01:12