0

它是在制作新版本的 Number 函数并将其命名为别的吗?有没有更好的方法来写这个?

Number.prototype.clamp = function(min, max) {
  return Math.min(Math.max(this, min), max);
};

是不是一样

Number.prototype.NumberToMystring = function(n) {
  return n.toSTring();
};

然后 NumberToMystring(5) 将返回 "5" 但作为字符串

4

2 回答 2

1

No NumberToMystring 与clamp 不同。

Clamp 有不同的目标,NumberToMystring 也是如此。Clamp 确保数字在后者是转换运算符的范围内。

夹具的用途是

var x = (5).clamp(0, 255); return 5


Number.prototype.clamp = function(min, max) {
  return Math.min(Math.max(this, min), max);
};

如果你看到这个原型。您将在 return 语句中有一个 this 对象。这只不过是您在我们的例子中调用夹子的数字,它是 5。

要了解为什么会这样,您必须了解很多概念,从执行上下文、范围开始,然后访问原型。

尝试像这样更改钳位函数,看看它返回什么。这将帮助您了解为什么您的 JS fiddle 代码不起作用。

Number.prototype.newclamp = function(min, max) {
  return this;
};

这将返回 Number 对象。如果您在此调用期间分析作用域链,那么您将在其作用域中找到 5,因此执行任何操作时将返回 5

var y = 5;
var z;

z = y.newclamp();
z.toString() // return 5;


Number.prototype.NumberToMystring = function(n) {
  return n.toSTring();
};

在这个特定的原型中,您只使用调用原型时传递的参数。这就是 NumberToMystring(5) 以 5 作为参数返回“5”的原因

要了解原型、范围链和执行上下文,请查看此站点。 http://dmitrysoshnikov.com/ecmascript/chapter-3-this/

于 2013-03-26T07:49:33.330 回答
0

JavaScript 中的所有对象都是 Object Object 的后代;所有对象都从 Object.prototype Object.prototype 继承方法
和属性,尽管它们可能被覆盖(除了具有空原型的对象,即 Object.create(null))。例如,其他
构造函数的原型会覆盖构造函数属性并提供自己的 toString
方法。对 Object 原型对象的更改会传播到所有对象,除非受这些更改影响的属性和方法沿原型链被进一步覆盖。

看这里

于 2013-03-26T07:54:09.227 回答