相关疑难解决方法(0)

为什么扩展本机对象是一种不好的做法?

每个JS意见领袖都说扩展原生对象是一种不好的做法.但为什么?我们是否获得了性能?他们是否害怕有人以"错误的方式"做到这一点,并添加了可枚举的类型Object,几乎破坏了任何对象上的所有循环?

TJ Holowaychukshould.js为例.他增加了一个简单的getterObject,一切工作正常(来源).

Object.defineProperty(Object.prototype, 'should', {
  set: function(){},
  get: function(){
    return new Assertion(Object(this).valueOf());
  },
  configurable: true
});
Run Code Online (Sandbox Code Playgroud)

这真的很有道理.例如,可以扩展Array.

Array.defineProperty(Array.prototype, "remove", {
  set: function(){},
  get: function(){
    return removeArrayElement.bind(this);
  }
});
var arr = [0, 1, 2, 3, 4];
arr.remove(3);
Run Code Online (Sandbox Code Playgroud)

是否有任何反对扩展本机类型的论据?

javascript prototype prototypal-inheritance

121
推荐指数
7
解决办法
3万
查看次数

为什么Array.forEach比Javascript中的for()循环慢?

任何人都可以告诉我什么是array.forEach比javascript中的循环慢的原因.有什么特别的原因吗?

这是我试图找到性能的代码.

// Populate the base array
    var arr = [];
    for (var i = 0; i < 1000; i++) {
      arr[i] = i;
    }

    function someFn(i) {
      return i * 3 * 8;
    }
Run Code Online (Sandbox Code Playgroud)

使用Array.forEach:

arr.forEach(function (item){
  someFn(item);
})
Run Code Online (Sandbox Code Playgroud)

使用for循环:

for (var i = 0, len = arr.length; i < len; i++) {
  someFn(arr[i]);
}
Run Code Online (Sandbox Code Playgroud)

我在测试跑步者上测试过它.结果如下: 在此输入图像描述

如您所见,Array.ForEach比for循环慢96%.提前致谢.

javascript arrays performance foreach

9
推荐指数
1
解决办法
1万
查看次数