Я знаю, что это действительно раздражает, чтобы снова прочитать эту тему. Прежде чем вы начнете копировать код, одним из решений может быть то, что я не получаю прототипы и объекты в JavaScript. Но на данный момент я думаю, .Клонирование объектов JavaScript. Снова :(
проблема заключается в том:
Как клонировать JavaScript класса (созданные с прототипами), так что «клонировали» класса остается нетронутым при расширении и выполнения впоследствии
function clone(obj){
if(obj == null || typeof(obj) != 'object')
return obj;
var temp = new obj.constructor();
for(var key in obj)
temp[key] = clone(obj[key]);
return temp;
}
var FOO = function() {
var myBAR = clone(BAR);
myBAR.prototype = jQuery.extend(true, myBAR.prototype, this); // deep cloning twice and extending with this
console.log("FOO:", this.name);
new myBAR();
};
FOO.prototype = {
name: "FOO"
};
var BAR = function() {
console.log("BAR:", this.name);
};
BAR.prototype = {
name: "BAR"
};
new FOO(); // returns FOO: FOO and BAR: FOO
new BAR(); // returns BAR: FOO should return BAR: BAR
Если я»? у меня все получилось, второй звонок new BAR()
(после new FOO()
) должен повторить n BAR: BAR
не BAR: FOO
как на данный момент.
Одно из возможных решений этой проблемы является полное переписывание функции clone
в чем-то вроде этого:
function clone(obj) {
return eval("("+obj.toString()+")"); // the same as eval(uneval(obj));
}
Но такой подход имеет большой недостаток, вы не можете передавать динамически созданные объекты.
Любые идеи?
Что вы подразумеваете под «динамически создаваемыми объектами»? –
Представьте, что вы создали экземпляр
CAT
внутриFOO
и сохранили CAT как свойство вродеthis.cat = new CAT();
ИCAT
Класс создал и сохранил ссылку на элемент DOM. подобныйthis.myBody = $("body")
. –В процессе клонирования, когда вы хотите скопировать, и когда вы хотите скопировать ссылку? – Rojo