2017-01-09 4 views
1

Я хочу, чтобы переписать этот в номер прототипа функции и динамически изменять значение переменной, например:JS - переписать это в функции прототипа

Number.prototype.xd = function(){ 
    this = 11212; 
} 
var a = 171717; 
console.log(a); 
a.xd(); 
console.log(a); 

является то, что я хочу, но он выдает ошибку. Таким образом работает метод Array.prototype.pop:

fruits = ["a","b","c","d"]; 
console.log(fruits); 
fruits.pop(); 
console.log(fruits); 

Могу ли я сделать то же самое?

+2

Вы когда-нибудь замечали, что все методы для примитивных значений * возврата * новое значение? –

+1

'Array.prototype.pop' не присваивает' this', он изменяет свойства объекта, на который ссылается 'this'. – Barmar

ответ

6

Вы не можете достичь того, чего хотите, потому что числа в JS неизменяемы.

Еще одна причина, по которой это не сработало, потому что this уже является динамическим в JS по его определению, поэтому он будет автоматически изменяться каждый раз, когда вызывается функция, в зависимости от того, как она вызвана.

0

это невозможно. number является одним из примитивов JS, а как all primitives он обертывается в Number во время выполнения.

0

Вы можете изменить сложные типы (объект, массив, функция), но, к сожалению, вы не можете изменить примитивные типы (строка, число, логическое значение, значение null, undefined). Это свойство называется «неизменностью».

Вы также можете найти этот ответ полезным: https://stackoverflow.com/a/16115543/3236521