登录
登录 注册新账号
注册
已有账号登录
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?

2 个回答

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

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

prototype 属性不是原型链。

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

撰写答案