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