javascript - 整数原型(prototype)

标签 javascript

如何在整数上制作原型(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(falseenumerable 的默认值;为了强调,我在这里明确说明)。这意味着它不会出现在 for..in 循环中,因此软化了反对扩展原生对象原型(prototype)的论点。

但是,即使使用 Object.defineProperty,命名冲突的可能性(与其他代码也扩展原型(prototype),或在未来版本的 JavaScript 中添加的功能)仍然存在。

关于javascript - 整数原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6394841/

相关文章:

javascript - 如何检查 jQuery 的 FIND 结果

javascript - 从谷歌地图中删除圈子 react

javascript - CasperJS - 尝试通过循环填充下拉菜单时访问页面的内容

javascript - 这两行 jQuery 等效吗?

javascript - 在不触发 hashchange 事件的情况下以编程方式更新哈希?

javascript - ngx-quill/quill.js 从innerHTML中去除自定义印迹

javascript - 在 Dojo 类中递归调用 setTimeout 时是否存在内存泄漏?

javascript - 引用(而不是复制)一个类作为另一个类的成员 - Mootools

javascript - 获取切换类的长度

javascript - 在回调中发送电子邮件时 Nodemailer 不工作