js原型链的问题

function doSomething(){}
doSomething.prototype.foo = "bar";
var doSomeInstancing = new doSomething();
doSomeInstancing.prop = "some value";
console.log("doSomeInstancing.prop:      " + doSomeInstancing.prop);
console.log("doSomeInstancing.foo:       " + doSomeInstancing.foo);
console.log("doSomething.prop:           " + doSomething.prop);
console.log("doSomething.foo:            " + doSomething.foo);
console.log("doSomething.prototype.prop: " + doSomething.prototype.prop);
console.log("doSomething.prototype.foo:  " + doSomething.prototype.foo);

输出

doSomeInstancing.prop:      some value
doSomeInstancing.foo:       bar
doSomething.prop:           undefined
doSomething.foo:            undefined
doSomething.prototype.prop: undefined
doSomething.prototype.foo:  bar

为什么doSomething.foo是undefined而不是原型链上的bar?

阅读 1.7k
2 个回答

你没理解啥是原型.
doSomeInstancing.foo才会根据原型链去找doSomething.prototype.foo

doSomething.foo要么直接输出定义在doSomething上的foo属性,要么去找Function上的foo,再找不到 就去找Object上的foo属性.这才是原型链。

prototype 属性不是原型链。

要找到原型,需要用 Object.getPrototypeOf() ,或者,在浏览器中,对大部分对象,用 .__proto__ 属性。

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