重写数组函数后,为什么两个对象的行为不同?
function Array(){}
var array1 = ['1','2']
var array2 = new Array();
console.log(array1.length); // 2
console.log(array2.length); // undefined
此外,Object()
返回一个空对象实例但是使用了用户定义的函数,我们必须使用new
运算符,为什么?
答案 0 :(得分:0)
那个(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
不受函数提升影响的必要条件)