【问题标题】:Copy and extend global objects in javascript在 javascript 中复制和扩展全局对象
【发布时间】:2010-03-02 11:37:04
【问题描述】:

有没有办法复制一个全局对象(数组、字符串...),然后在不影响原始对象的情况下扩展副本的原型?我试过这个:

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

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

【问题讨论】:

  • 我假设第一行实际上是:var copy=Array;
  • 要创建类似数组的“类”,请参阅stackoverflow.com/questions/366031/… 您似乎也不了解 Javascript 继承。您应该在 Google 上搜索“Javascript 原型继承”之类的内容。

标签: javascript oop


【解决方案1】:

好问题。我有一种感觉,您可能必须为此编写一个包装类。您对copy.prototype.test=2 所做的实质上是设置一个类原型,该类原型(当然)对于该类的所有实例都是可见的。

【讨论】:

  • 你有包装类的例子吗?
  • @mck89:对不起,我没有注意到你在这里的评论。 S.O. 的通知功能需要一些工作,哈哈。我认为您设法对包装类进行了排序?
【解决方案2】:

我认为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。希望这会有所帮助。

【讨论】:

    【解决方案3】:

    与其扩展原型,不如简单地扩展复制变量。比如添加一个函数

    copy.newFunction = function(pParam1) { 
          alert(pParam1);
    };
    

    【讨论】:

    • 因为这样如果我创建一个新的副本实例,它将没有该方法,因为它只需要原型方法。无论如何,这并不能解决问题,因为它也扩展了原始 Array 对象。
    猜你喜欢
    • 2016-05-06
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 2014-10-06
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    相关资源
    最近更新 更多