Вход

Просмотр полной версии : Скопировать объект но не стать им


BorodinKO
08.06.2012, 01:16
function myBook(){
this.x = 0;
this.y = 0;
}

book = new Array();

book[0] = new myBook();
book[1] = book[0];

book[1].x = 1;
alert(book[0].x);


В этом случае book[1] - становится как бы ярлыком на book[0];
а мне надо так чтобы он скопировался, не подскажите как это сделать?

Magneto
08.06.2012, 01:59
function myBook(){
this.x = 0;
this.y = 0;
}

book = new Array();

book[0] = new myBook();
book[1] = new myBook();

book[1].x = 1;
alert(book[0].x);

BorodinKO
08.06.2012, 08:04
Мне важно, чтобы book[1] принял теже параметры что и у book[0];

function myBook(){
this.x = 0;
this.y = 0;
}

book = new Array();

book[0] = new myBook();
book[0].x+=10;book[0].y+=10;

book[1] = book[0];

book[1].x = 1;
alert(book[0].x);

Deff
08.06.2012, 10:39
function myBook(){
this.x = 0;
this.y = 0;
}

book = new Array();

book[0] = new myBook();
book[1] = new myBook();

book[1].x = book[0].x
book[1].y = book[0].y

book[1].x = 1

alert(book[0].x);

nerv_
08.06.2012, 16:03
//по этому это не полнцоенное копирование.потому, что это "правильное" наследование : )
Мне остается только дать ссылку (http://learn.javascript.ru/prototype#%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1% 8F-inherit-%D0%B4%D0%BB%D1%8F-%D1%8D%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D0%B8-object-create-proto), по которой приводится пример как это сделать кросс-браузерно и немного невнятной альтернативы ниже.
function MyBook() {
this.x = 0;
this.y = 0;
}

MyBook.prototype.copyFrom = function( obj ) {
var key;
for( key in obj ) {
if ( obj.hasOwnProperty( key ) ) {
this[ key ] = obj[ key ];
}
}
};

book = [ new MyBook(), new MyBook() ];

book[ 0 ].x = 11;
book[ 0 ].y = 12;

book[ 1 ].copyFrom( book[ 0 ] );

alert( book[ 1 ].x );