在javascript中复制和扩展全局对象

时间:2010-03-02 11:37:04

标签: javascript oop

有没有办法复制全局对象(Array,String ...)然后扩展副本的原型而不影响原始对象?我试过这个:

var copy=Array;
copy.prototype.test=2;

但是如果我检查Array.prototype.test它是2,因为Array对象是通过引用传递的。我想知道是否有办法使“复制”变量的行为类似于数组,但可以在不影响原始Array对象的情况下进行扩展。

3 个答案:

答案 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);
};