Показать сообщение отдельно
  #6 (permalink)  
Старый 30.11.2008, 13:50
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Это не клонирование, а скорее наследование на прототипах, и повторная инициализация прототипа там лишняя, функцию можно переписать так:
Object.prototype.clone = function() {
    function F() {};
    F.prototype = this;
    return new F();
};

Здесь используется тот факт, что пока на объект существует хотя бы одна ссылка, он остается в памяти. Так в этом коде ссылка на объект остается в прототипе нового объекта.
Получается что-то вроде инициализации прототипа таким образом:
function F() {}
F.prototype = {
   attribute1: …,
   attribute2: …,
   attribute3: …,
   method1: …,
   method2: …,
   method3: …
};

Вообще эта конструкция не реализует то, что хотелось бы понимать под клонированием объекта:
var obj1 = {a: 0};
var obj2 = obj1.clone();
obj1.a = 1;
alert(obj2.a); // выдаст 1

Последний раз редактировалось Octane, 30.11.2008 в 14:00.
Ответить с цитированием