这个原型做什么?

时间:2013-03-26 07:43:48

标签: javascript

是否正在制作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”但作为字符串

2 个答案:

答案 0 :(得分: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。

要理解为什么会这样发生,你必须要了解很多概念,从执行上下文,Scope开始,然后访问原型。

尝试像这样更改钳位功能并查看它返回的内容。这将有助于您理解为什么您的JS小提琴代码不起作用。

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/

答案 1 :(得分:0)

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

SEE HERE