js 的function为什么可以添加属性
1 2 3 4 5 6 7 8 9 10 | (1) function person(){ this .name = 'Tom' ; } (2) function person(){} person.name = 'Tom' ; (3) function person(){} person.prototype.name = 'Tom' |
1是公有属性
2是静态属性
3是原型共享属性
解释1:
因为 JS 里, 函数也是对象, 是 Function 的实例。
function person(){
this.name = 'Tom';
}
这时候一般把 person 当作构造函数。
const demo = new person()
name 属性是挂在 new 生成对象, 也就是 demo 上的。
ps: 当然, 你也可以不用 new 调用 person。但是可能会发生不可预知的后果。
function person(){}
person.name = 'Tom';
这是在函数对象上直接定义了 name 属性。
function person(){}
person.prototype.name = 'Tom'
每个函数都会有一个 prototype 的属性(箭头函数除外)。 name 是放到原型属性上。
每个用 new 调用生成的对象,都可以访问到它们构造函数原型上的 name 属性。
解释2:
因为Js里面函数也是对象。
函数其实也有另一个写法就是
a = new Function("return 1");
函数也是new出来的,所以函数其实也是一个对象。所以对象可以添加属性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构