Копировать и расширять глобальные объекты в JavaScript - PullRequest
5 голосов
/ 02 марта 2010

Есть ли способ скопировать глобальный объект (Array, String ...) и затем расширить прототип копии, не затрагивая исходный? Я пробовал с этим:

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

Но если я проверю Array.prototype.test, это 2, потому что объект Array передается по ссылке. Я хочу знать, есть ли способ заставить переменную «copy» вести себя как массив, но это можно расширить, не затрагивая исходный объект Array.

Ответы [ 3 ]

2 голосов
/ 02 марта 2010

Хороший вопрос. У меня такое чувство, что вам, возможно, придется написать класс-обёртку для этого. Что вы по существу делаете с copy.prototype.test=2, так это устанавливаете прототип класса, который (конечно) будет видимым для всех экземпляров этого класса.

1 голос
/ 14 июля 2011

Я думаю, что причина в 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. Надеюсь, это поможет.

0 голосов
/ 02 марта 2010

Вместо того, чтобы расширять прототип, почему бы вам просто не расширить переменную копирования. Например, добавив функцию

copy.newFunction = function(pParam1) { 
      alert(pParam1);
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...