Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 整数原型_Javascript - Fatal编程技术网

Javascript 整数原型

Javascript 整数原型,javascript,Javascript,如何在整数上制作原型 Integer.prototype.num = function(dec){ return number_format(this.toString(), dec); } JavaScript中没有整数,只有数字。您可以按显示的方式扩展编号 关于以这种方式扩展内置类型,有两个阵营。一个阵营说这是邪恶的,你不能这样做;使用将对象传递到的单独函数。另一个阵营说这正是我们拥有原型的原因,这样我们就可以扩展我们认为合适的功能 如果你在第二个阵营,有陷阱需要避免(但请参阅下面

如何在整数上制作原型

Integer.prototype.num = function(dec){
    return number_format(this.toString(), dec);
}

JavaScript中没有整数,只有数字。您可以按显示的方式扩展编号

关于以这种方式扩展内置类型,有两个阵营。一个阵营说这是邪恶的,你不能这样做;使用将对象传递到的单独函数。另一个阵营说这正是我们拥有原型的原因,这样我们就可以扩展我们认为合适的功能

如果你在第二个阵营,有陷阱需要避免(但请参阅下面的“世界正在改变…”):

  • 永远不要用这种方式扩展
    Object.prototype
    。您将破坏大量代码
  • 非常非常小心扩展
    数组。prototype
    ,您将破坏相当多的代码
这两种情况的原因都是,当您以这种方式扩展原型时,您会在原型上创建一个可枚举属性。这意味着它显示在循环中。JavaScript世界的习惯和实践是,空白对象(
{}
)上必须没有可枚举属性。数组可能更容易接受,但要小心那些不太了解的人,他们认为它会循环遍历数组索引;如果您以这种方式扩展
Array.prototype
,您将打破它们的循环。(我会说他们的线圈已经断了,但把它放在一边……)

不过,世界正在发生变化,因为它为我们提供了一种向对象添加不可枚举属性的方法,而所有模糊的最新浏览器都实现了这一点。它被称为
对象。defineProperty

Object.defineProperty(Number.prototype, "num", {
    enumerable: false,
    value: function() { ... }
});
请注意,
enumerable:false
false
enumerable
的默认值;我在这里明确强调这一点)。这意味着它不会出现在循环中的
for..in中,从而软化了反对扩展本机对象原型的论点


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

JavaScript没有整数类型(
Integer
)。仅浮点数(请尝试
typeof 3
。返回
Number

因此,您可以使用以下内容:

Number.prototype.myfunc = function() { }
补遗
正如Felix Kling在评论中提到的,使用
.prototype
属性扩展Javascript内置对象通常不是一个好主意。新的扩展将自动应用于此类型的所有对象,包括已实例化的对象和将由代码(而不是您的代码)创建的非对象。因此,它可能会干扰其他一些代码对Number对象的期望。

Integer
不是本机javascript对象。也许您的意思是向
Number
的原型添加一个格式化方法?例如:


JavaScript只有
编号
。扩展内置对象的原型在一般情况下不是一个好主意。它被称为“猴子补丁”,被认为是不好的做法。如果没有构造函数,它可以正常工作:
Number.prototype.myfunc=function(){console.log(42)};a=5;a、 myfunc()//42
。实际上使用
Number()
会产生各种其他问题。您不需要使用构造函数就可以使用
Number
方法<代码>(10).toString()
@Felix和CD:已更正。很抱歉,谢谢你的评论。
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