首页 > 解决方案 > 将属性设置为 JS 函数的原型

问题描述

我创建函数并在其原型中添加属性,如下所示

let F = function(){}
 F.prototype.foo = 'abc'

我的问题是为什么在使用 F.foo 时它会返回 undefined?但是使用这个之后

let F = function() {}
F.prototype.foo = 'abc'
let fn = new F()
console.log(fn.foo) // return 'abc'

标签: javascriptprototype-chain

解决方案


foo原型对象的属性,实例在实例化时具有内部原型。这和构造函数不是一回事,完全不同。

当你调用构造函数时,你会得到一个实例作为返回,但构造函数不是实例,也不是实例的原型。

这就是原型链在这里的工作方式:

Object.prototype -> Function.prototype -> F

Object.prototype -> F.prototype -> fn

当你设置一些东西时F.prototype,它不在 F 的内部原型链上——它只在实例的原型链上。

如果你在 上设置一些东西Object.prototype,实例Ffn实例都会继承它:

let F = function() {}
Object.prototype.foo = 'abc'
let fn = new F()
console.log(fn.foo) // return 'abc'
console.log(F.foo);

这是有效的,因为Object.prototype在他们的两个原型链中。

(但这只是为了让您了解事物的工作原理 - 在实际代码中,您不应该改变Object.prototype


推荐阅读