Javascript 原型链接和委托如何工作?

How does Javascript prototype linkage and delegation work?

function func() {}

func.prototype.foo = "Var"

console.log(func.foo) // undefined

var foonew = new func() 

console.log(foonew.foo) // Var

为什么func.foo无法查找原型属性??

function func() {}

func.__proto__.foo = "Var"

console.log(func.foo) // Var

var foonew = new func() 

console.log(foonew.foo) // undefined

当使用 proto 对原型的引用时,行为似乎相反。

您将 [[Prototype]] 与 prototype 混淆了。

[[Prototype]],也称为 __proto__,是一个内部 属性,它确定当前对象应从哪个对象继承。

prototype 是一个 属性 的构造函数,它决定了新创建实例的 [[Prototype]]。

这在 __proto__ VS. prototype in JavaScript 中有完整的解释。

您可以通过将构造函数的 [[Prototype]] 设置为其 prototype 来实现这两种行为。您可以为此使用 setPrototypeOf(或 __proto__):

function func() {}
Object.setPrototypeOf(func, func.prototype);
func.prototype.foo = "Var";

func.foo;       // "Var"
new func().foo; // "Var"

不过我不推荐它。