Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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_Extend - Fatal编程技术网

在JavaScript中扩展数学对象

在JavaScript中扩展数学对象,javascript,extend,Javascript,Extend,因为直接扩展内置对象的做法不好,所以我考虑创建一个本地对象来扩展全局对象,例如使用$.extend(obj,Math)Math是一个对象,但是您似乎无法访问它的任何属性,例如: for (obj in Math) { console.log(obj); } 为什么?因为它们都被定义为不可枚举的。规范定义对象的几乎所有内置属性都是不可枚举的。枚举对象中的属性时,不可枚举属性不会显示(通过for in或object.keys) 不过,你有两个想法: 您可以使用Math作为原型创建对象,如下所

因为直接扩展内置对象的做法不好,所以我考虑创建一个本地对象来扩展全局对象,例如使用
$.extend(obj,Math)
Math
是一个对象,但是您似乎无法访问它的任何属性,例如:

for (obj in Math) {
   console.log(obj);
}

为什么?

因为它们都被定义为不可枚举的。规范定义对象的几乎所有内置属性都是不可枚举的。枚举对象中的属性时,不可枚举属性不会显示(通过
for in
object.keys

不过,你有两个想法:

  • 您可以使用
    Math
    作为原型创建对象,如下所示:

    for (obj in Math) {
       console.log(obj);
    }
    
    //使用Math作为原型创建MyMath对象
    var MyMath=Object.create(数学);
    //检查MyMath是否有数学函数
    显示(MyMath.floor(2.3));
    //效用函数
    功能显示(msg){
    document.body.insertAdjacentHTML(“beforeed”和“”+msg+”

    ”; }
    除了填隙/填充外,扩展内置对象的原型通常被视为不好的做法。但是向非原型(比如
    数学
    )添加函数是非常无害的。@T.J.Crowder为什么?如果其他人也添加了相同名称的内容呢?还是因为它太少了?为什么添加原型通常被视为不好的做法?是的,这是冲突——既与其他人添加的内容冲突,也与规范的更新冲突。例如:几年前,PrototypeJS使用
    =
    比较将
    indexOf
    添加到数组实例中。然后将
    indexOf
    添加到规范中,但使用
    =
    比较。因此,使用PrototypeJS并依赖旧定义的代码将因新定义而失败。它也有一个坏名声,因为在ES5之前,你不能向原型添加不可枚举的属性,所以像这样的添加出现在人们意想不到的地方。就我个人而言,除了应用程序代码中的
    Object.prototype
    ,我对添加原型没有问题。你只是在承担责任,确保一旦发生冲突,你能处理好它。在我看来,在库中这样做是一个坏主意。它没有在实例上显示属性的问题,它包含的内容更多。当然,冲突问题仍然存在。