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"
不过我不推荐它。
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"
不过我不推荐它。