찾다

 >  Q&A  >  본문

javascript - 不使用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有关么?

PHP中文网PHP中文网2817일 전339

모든 응답(3)나는 대답할 것이다

  • 怪我咯

    怪我咯2017-04-10 17:47:21

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

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-10 17:47:21

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

    회신하다
    0
  • 迷茫

    迷茫2017-04-10 17:47:21

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

    회신하다
    0
  • 취소회신하다