Javascript 如何通过添加类似于++;
我想用一个将数字增加2的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) 使用此访问的是一个数字对象,它包装了基本数字。电话打完后就扔掉了。
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();