Javascript 如何通过添加类似于++;

Javascript 如何通过添加类似于++;,javascript,typescript,Javascript,Typescript,我想用一个将数字增加2的plusPlus2函数扩展Number 问题是我不知道如何将结果分配回扩展函数中的数字。比如: Number.prototype.plusPlus2 = function() { this = this + 2; } 其用法是: x = 1; x.plusPlus2(); // expect x to be 3 你不能。这有多种原因: 1) 此为只读,因为您不希望它在方法执行期间发生更改 2) 使用此访问的是一个数字对象,它包装了基本数字。电话打完后就扔掉了。

我想用一个将数字增加2的
plusPlus2
函数扩展
Number

问题是我不知道如何将结果分配回扩展函数中的数字。比如:

Number.prototype.plusPlus2 = function() {
    this = this + 2;
}
其用法是:

x = 1;
x.plusPlus2(); // expect x to be 3

你不能。这有多种原因:

1)
为只读,因为您不希望它在方法执行期间发生更改

2) 使用
访问的是一个数字对象,它包装了基本数字。电话打完后就扔掉了。因此,即使您可以更改包含数字的内部值属性,
x
的值也不会更改

 Number.prototype.example = function() { this.stuff = "you see" };
 let x = 1; // primitive
 x.example(); // wrapped object
 // wrapped object gets thrown away
 console.log(x.stuff); // undefined, another wrapped object
3) 数字是不变的和原始的。您可以将一个新数字写入
x
,但不能将所有的1变为3


您可以创建一个新的数字,但是您有一个问题,那就是您必须将该数字写入
x

 Number.prototype.plus2 = function() { return this + 2 };
 let x = 1;
 x = x.plus2();
原语(数字、字符串、布尔值)在javascript中是不可变的

因此,无论何时更改原语,都需要将其分配给另一个变量(甚至重新分配给自身)

也就是说,您不能执行您的建议,您需要返回一个新值,包含您想要的值,比如:

Number.prototype.plusplus2 = function() { 
    return this + 2;
}
然后重新分配:

let x = 5;
x = x.plusplus2();
然后,您可能想知道:如何
x++
工作?


答案是,
x++
x=x+1
的语法糖,这意味着,实际上,您并没有改变
x
,而是,将1添加到
x
并将其重新分配给自身。

请不要使用猴子补丁内置类型:这会增加维护和调试的额外复杂性。我不明白为什么
x+=2
是insufficient@tic我以此为例。我的具体情况不同。我需要一个递增1的操作符,当它达到阈值时,它会从0开始。我想用它来控制数组中的索引,该数组用作项列表的循环存储“x++是x=x+1的语法糖”——这肯定不是真的<代码>变量v='0'然后尝试
++
+1
进行比较。我发现声称“语法糖”是适得其反的,因为几乎总是有细微差别。我认为这是一个幼稚的问题,但无论如何,我要问,有没有办法在项目内的TS中添加“语法糖”?不是真的。在其他语言中,比如Ruby、C,您可以创建自己的语法糖,比如“i+++”,因为“+++”被认为是一种方法。在javascript(或typescript,即a)中,“i++”不被视为一种方法,相反,它是语言的一部分(如“函数”、“while”、“for”关键字),这是在语言语法中定义的。一般来说,答案应该对它有更多的解释,而不仅仅是代码——它需要在将来对其他人有用。
let x = 5;
x = x.plusplus2();