javascript中new的疑问

新手上路,请多包涵
function P(name){
    this.name = name;
}

var p = new P("Simon");

var f = {};
f.__proto__ = P.prototype;
P.call(f, "Simon");

问题是:当我在chrome中调试的时候发现f: Object,而p:P,为何不是f:P?

我的理解,由于我更改了f.__proto__属性,导致f的constructor是P,这样f就是是P的实例,这点可以通过f instanceof P === true证明。

刚刚试了IE下是f:P,难道是chrome的问题?

阅读 2.9k
2 个回答

在Chrome里f: Object中的Object是表示f的构造函数是Object,而constructor是每个对象都有的属性,自身的属性会覆盖原型的属性,另现在并不建议使用__proto__,因为并不是标准的。

MDN:Object.prototype.constructor

f instanceof Object也是对的,原型是向上继承的。

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