覆盖 Javascript 中的全局函数

Overriding global functions in Javascript

覆盖Array函数后,为什么两个对象的行为不同?

function Array(){}

var array1 = ['1','2']
var array2 = new Array();

console.log(array1.length);     // 2
console.log(array2.length);     // undefined

另外,Object() returns一个空的对象实例,但是有一个用户自定义函数,我们必须使用new运算符,为什么?

那(Object() 没有 new)是一个快捷方式,您也可以提供它:

function Stuff(x){
  if(!(this instanceof Stuff)){
    console.log("You forgot 'new'");
    return new Stuff(x);
  }
  this.x=x;
}

var a=Stuff(1);
var b=new Stuff(2);
console.log(a,b);
是的,当您在本地覆盖内置的 Array 时,您会被那个卡住了。但是已经存在的数组仍然是原始的,它们不会追溯适合您自己的类型,并且 [] 语法不受您的覆盖影响(c 的情况):

var a=[1,2];
var b=new Array(3,4);

(function(){
  function Array(){}
  var c=[1,2];
  var d=new Array(3,4);
  console.log("a:",a);
  console.log("b:",b);
  console.log("c:",c);
  console.log("d:",d);
})()
(函数魔法是 b 不受函数提升影响所必需的)