如何在整数上制作原型(prototype)?
Integer.prototype.num = function(dec){
return number_format(this.toString(), dec);
}
最佳答案
JavaScript 中没有Integer
,只有Number
。您可以按照显示的方式扩展 Number
。
关于扩展内置原型(prototype)有两个阵营。一个阵营说这是邪恶的,你不能做;使用将对象传递给的单独函数。另一个阵营说这正是我们拥有原型(prototype)的原因,这样我们就可以按照我们认为合适的方式扩展事物的功能。
如果您处于第二个阵营,则需要避免一些陷阱:
- 永远,永远,永远以您展示的方式(通过赋值)扩展
Object.prototype
。您会破坏大量代码。 - 要非常、非常小心地以您展示的方式扩展
Array.prototype
,否则您会破坏相当多的代码。
这两种情况的原因是,当您以这种方式扩展原型(prototype)时,您会在原型(prototype)上创建一个可枚举 属性。这意味着它出现在 for..in
循环中。 JavaScript 世界的习惯和做法是,空白对象上必须没有可枚举的属性 ({}
)。数组可能更容易接受,但要小心那些不太了解的人 what for..in
does谁认为它会遍历数组索引;如果你按照你展示的方式扩展 Array.prototype
,你就会打破他们的循环。 (我认为他们的循环已经被打破了,但把它放在一边......)
我一直说“以所示方式”,因为您可以通过 Object.defineProperty
向对象添加不可枚举 属性:
Object.defineProperty(Number.prototype, "num", {
enumerable: false,
value: function() { ... }
});
请注意 enumerable: false
(false
是 enumerable
的默认值;为了强调,我在这里明确说明)。这意味着它不会出现在 for..in
循环中,因此软化了反对扩展原生对象原型(prototype)的论点。
但是,即使使用 Object.defineProperty
,命名冲突的可能性(与其他代码也扩展原型(prototype),或在未来版本的 JavaScript 中添加的功能)仍然存在。
关于javascript - 整数原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6394841/