你如何在整数上制作原型?
Integer.prototype.num = function(dec){
return number_format(this.toString(), dec);
}
Run Code Online (Sandbox Code Playgroud)
T.J*_*der 38
Integer只是在JavaScript中没有Number.您可以Number按照您展示的方式进行扩展.
以这种方式扩展内置类型有两个阵营.一个阵营说这是邪恶的,你不能这样做; 使用您传递对象的单独函数.另一个阵营说这就是为什么我们有原型,所以我们可以扩展我们认为合适的东西的功能.
如果你在第二个阵营,有一些陷阱需要避免(但请参阅下面的"世界正在改变..."):
Object.prototype以这种方式.你将打破大量的代码.Array.prototype,你会破坏相当多的代码.两种情况下的原因是,当您以这种方式扩展原型时,您将在原型上创建一个可枚举的属性.这意味着它显示在for..in循环中.JavaScript世界中的自定义和实践是空白对象()上必须没有可枚举的属性{}.阵列可能更受欢迎,但要小心的人谁不真正了解什么for..in做谁想到它会遍历数组索引; 如果你Array.prototype以这种方式延伸,你将打破他们的循环.(我认为他们的循环已经被破坏了,但是把它放在一边......)
但是,世界正在发生变化,因为ECMAScript5为我们提供了一种向对象添加非可枚举属性的方法,并且所有模糊的最新浏览器都实现了它.它被称为Object.defineProperty:
Object.defineProperty(Number.prototype, "num", {
enumerable: false,
value: function() { ... }
});
Run Code Online (Sandbox Code Playgroud)
请注意enumerable: false(false默认为enumerable;我在此明确强调).这意味着它不会显示在for..in循环上,因此可以软化该参数以防止扩展本机对象的原型.
但是,命名冲突的可能性(其他代码也扩展了原型,或未来版本的JavaScript中添加的功能)仍然存在,即使有Object.defineProperty.
Javascript没有整数类型(Integer).只有浮点数(尝试typeof 3.返回Number).
所以你可以使用类似的东西:
Number.prototype.myfunc = function() { }
Run Code Online (Sandbox Code Playgroud)
正如Felix Kling在评论中提到的那样,使用该.prototype属性扩展内置对象的Javascript 通常不是一个好主意.新扩展会自动应用于此类型的所有对象 - 包括已实例化的对象以及将由除您之外的代码创建的非对象.因此,它可能会干扰其他一些代码对Number对象的期望.
Integer不是本机javascript对象.也许你的意思是为原型添加格式化方法Number?例如:
var formatNum = function(format){
return format === 'dec2'
? this.toPrecision(String(this).length+2)
: format === 'div10'
? Number(this/10).toPrecision(2)
: this;
}
Number.prototype.format = formatNum;
var num = 22;
num.format('dec2'); //=> 22.00
num.format('div10'); //=> 2.2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9621 次 |
| 最近记录: |