不使用new关键字创建Object对象为什么constructor有值?

var a1 = Object();
var a2 = new Object();
console.log(a1);
console.log(a1.constructor);
console.log(a2.constructor);

var Person = function(){
    this.name = "张三"
}
var b1 = new Person();
var b2 = Person();
console.log(b1.constructor);
console.log(b2.constructor);// 出错

由于b2没有使用new操作符,那么他的constructor == undefined。

从理论上讲,a1.constructor也没有定义,但其可以正常返回值,为什么?
与一切对象都继承自Object有关么?

阅读 4.1k
3 个回答

When called in a non-constructor context, Object behaves identically to new Object().

b2没有用new操作符来创建,所以他的原型链就是Person的原型链,Person创建于function,而function本身其实也是对象,它的constructor指向Function()构造函数~这个构造函数又是Object的实例,称为函数对象,它的constructor指向Object,Object的constructor为null。

你最后面的b2 其实不是函数 只是一个函数的返回值而已 所以即便是打印b2 也是undefined 因为Person()这个函数并没有返回值,
如果你写成b2 =Person 的话这个b2 就是一个函数 而函数的构造函数时Function 所以b2.constructor ===Function

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏