2013-08-14 2 views
0

Я делаю такПолучить абонента в Array.prototype

Array.prototype.foo = function(){ 
    return this.concat(this); 
}; 

a = [1,2,3]; 
a.foo(); 
a; // [1,2,3,1,2,3] 

Как я могу определить переменную внутри Array.prototype.foo? Если я пытаюсь somtehing так:

this = this.concat(this) 

Я получаю сообщение об ошибке:

"ReferenceError: Invalid левого присваивания"

+3

Как всегда? 'var aVariable = ...;'. Вы никогда не можете назначить 'this'. –

+0

как @Felix Kling сказал: Array.prototype.foo = function() {var a = this.concat (this); return a; }; –

ответ

2

Вы не можете назначить this keyword. Чтобы изменить текущий объект, вы должны изменить его, изменив его свойства.

Array.prototype.foo = function(){ 
    Array.prototype.push.apply(this, this); 
    return this; 
}; 

a = [1,2,3]; 
a.foo(); 
a; // [1,2,3,1,2,3] 

Ваш текущий код делает return новый экземпляр, который вы должны были бы переназначить a.

+0

Спасибо, "Array.prototype.push.apply (это, это);" - вот что мне нужно. – user2682398

+0

+1, хороший ответ. –

+0

К сожалению, слишком мало людей знают, что 'push' принимает несколько аргументов :-) Более явный:' for (var i = 0, l = this.length; i Bergi

0

Вы не можете переназначить "это". Однако вы можете присвоить новое значение вашей переменной «a».

Array.prototype.foo = function(){ 
return this.concat(this); 
}; 

a = [1,2,3]; 
a = a.foo(); 
console.log(a); 
Смежные вопросы