有没有办法复制全局对象(Array,String ...)然后扩展副本的原型而不影响原始对象?我试过这个:
var copy=Array;
copy.prototype.test=2;
但是如果我检查Array.prototype.test
它是2,因为Array对象是通过引用传递的。我想知道是否有办法使“复制”变量的行为类似于数组,但可以在不影响原始Array对象的情况下进行扩展。
答案 0 :(得分:2)
好问题。我有一种感觉,你可能要为此编写一个包装类。你基本上用copy.prototype.test=2
做的是设置一个类原型,它(当然)对于该类的所有实例都是可见的。
答案 1 :(得分:1)
我认为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
。希望这会有所帮助。
答案 2 :(得分:0)
为什么不简单地扩展复制变量,而不是扩展原型。例如,添加一个函数
copy.newFunction = function(pParam1) {
alert(pParam1);
};