小编Joe*_*ong的帖子

如何在构造函数的原型不是对象时创建对象?

我回答了这个问题:如何创建对象? 但在我回答之后我也有一个问题.

function Bar() {
    this.foo = true;
}
console.log('obj3');
Bar.prototype = 3;
var obj3 = new Bar();
console.log(obj3);
console.log(obj3.constructor === Bar);
console.log(obj3.constructor === Object);
  
console.log(Object.prototype === Object.getPrototypeOf(obj3));
console.log(obj3.foo);
Run Code Online (Sandbox Code Playgroud)

Bar.prototype = 3,我的理论是,在new Bar()执行时,如在步骤2中,创建的对象应该链接到Bar.prototype,但由于值Bar.prototype不引用对象,隐式地分配了默认值,即Object.prototype.

由于object.prototype.constructor的参考Object,obj3.constructor同时参考Object,但obj3事实上的构造仍然是Bar因为,第1步,其也可以通过证明console.log(obj3.foo); // true.

我对吗?

@Leo问我是否可以提供有关内部机制的更多信息.他在Firefox Chrome Safari中对它进行了测试,它们的行为都相同,他认为它应该是ECMA-262中明确规定的内容.但是,他没有到正确的地方.但是我也找不到任何支持我的论点,因此我正在寻求你的帮助.您能否提供有关内部机制的更多信息?

javascript constructor prototype object

2
推荐指数
1
解决办法
62
查看次数

标签 统计

constructor ×1

javascript ×1

object ×1

prototype ×1