javascript - 将属性设置为 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'
解决方案
foo
是原型对象的属性,实例在实例化时具有内部原型。这和构造函数不是一回事,完全不同。
当你调用构造函数时,你会得到一个实例作为返回,但构造函数不是实例,也不是实例的原型。
这就是原型链在这里的工作方式:
Object.prototype -> Function.prototype -> F
Object.prototype -> F.prototype -> fn
当你设置一些东西时F.prototype
,它不在 F 的内部原型链上——它只在实例的原型链上。
如果你在 上设置一些东西Object.prototype
,实例F
和fn
实例都会继承它:
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
)
推荐阅读
- java - Spring security:为什么在配置中的 UsernamePasswordAuthenticationFilter 之前添加 JWT 过滤器?
- javascript - 迭代数组时如何获得总数?
- github - 在 github 操作中切换环境变量
- docker - 附加到正在运行的远程容器时如何使 VSCode 运行自定义脚本
- java - 如何将数据从返回活动传递到先前活动中的对话框?
- python - Error when installing Tensorflow - Python 3.8
- android - Filter a contact List through TextWatcher in Android
- android - Facebook login crashing while Facebook app is installed
- c++ - OpenGL缓冲区问题
- go - How to get Prometheus Node Exporter metrics with JSON format