首页 > 解决方案 > 有没有办法给变量(数字)添加原型,并且原型可以改变变量本身?

问题描述

我知道将原型添加到本机 javascript 对象是一个坏主意,但我想将原型添加到变量中,例如原型Number.limit(min, max);可以更改变量的位置。

Number.prototype.limit = function(min, max) {
    if (this < min) {
        this =  min;
    } else if (this > max) {
        this = max;
    }
};

似乎 usingthis在分配错误中给出了无效的左侧

我搜索了谷歌和堆栈溢出,但没有人回答我的问题

那有可能吗?我该怎么做?

标签: javascriptprototype

解决方案


不,这是不可能的(在大多数情况下)——你能做的最好的就是返回调用者重新分配的新值:

Number.prototype.limit = function(min, max) {
  if (this < min) {
    return min;
  } else if (this > max) {
    return max;
  }
  return this;
};
let num = 5;
let newNum = num.limit(10, 15);

console.log(newNum);

如果您熟悉 Javascript,要了解为什么它不可能,那么在没有实现的情况下查看方法的调用可能会有所帮助:

let someVar = <something>;
someMethod(someVar);

无论如何someMethodsomeVar变量名在上述范围内绑定的对象或原语是不可更改的someMethod(除非someMethod也在该范围内定义,这有点奇怪,通常情况并非如此)。除非也有and someMethoddos 的词法范围,否则将保持引用。虽然可能会改变,但如果它是一个对象,它不能在另一个范围内重新分配变量名。someVarsomeVar = <somethingElse>someVar<something>someMethod<something>someVar


推荐阅读