Javascript原型链接和委托是如何工作的?
为什么func.foo无法查找prototype属性Javascript原型链接和委托是如何工作的?,javascript,prototype,delegation,Javascript,Prototype,Delegation,为什么func.foo无法查找prototype属性 function func() {} func.prototype.foo = "Var" console.log(func.foo) // undefined var foonew = new func() console.log(foonew.foo) // Var 当使用proto引用原型时,其行为看起来是相反的。您将[[prototype]]与原型混为一谈 [[Prototype]],也称为\uuuu proto\uuu,
function func() {}
func.prototype.foo = "Var"
console.log(func.foo) // undefined
var foonew = new func()
console.log(foonew.foo) // Var
当使用proto引用原型时,其行为看起来是相反的。您将[[prototype]]与
原型混为一谈
[[Prototype]],也称为\uuuu proto\uuu
,是一个内部属性,用于确定当前对象应从哪个对象继承
prototype
是构造函数的一个属性,它决定了新创建实例的[[prototype]]
这一点在本文中有充分的解释
通过将构造函数的[[Prototype]]设置为其Prototype
,可以实现这两种行为。您可以使用setPrototypeOf
(或\uuuuuuuuuuuuuuuuuuuuuuuu
)实现以下目的:
function func() {}
func.__proto__.foo = "Var"
console.log(func.foo) // Var
var foonew = new func()
console.log(foonew.foo) // undefined
不过我不推荐。@Vohuman。我不想比较原型和原型的属性。我试图理解为什么某个特定的查找不起作用。@Vohuman linked的问题和公认的答案清楚地解释了为什么第一次查找失败。它还隐式地解释了为什么不应该修改\uuuuu proto\uuuuu
,这解释了第二次查找。
function func() {}
Object.setPrototypeOf(func, func.prototype);
func.prototype.foo = "Var";
func.foo; // "Var"
new func().foo; // "Var"