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

时间:2015-10-27 14:25:43

标签: javascript prototype delegation

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 对原型的引用时,行为看起来是相反的。

1 个答案:

答案 0 :(得分:0)

您将[[原型]]与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"
但是,我不推荐它。