static
class中的static
起因
最近在学习手写 Promise 中,产生了一些关于 class 中 static 的疑问,因此在此记录下。在声明 Promise 中,声明了两个 resolve 和 reject,一个是普通的属性,一个是 static 属性。
在 class 内部通过了 this.resolve 调用了 resolve 属性,而在外面使用 Promise.resolve()来调用了 static resolve。这两者存在什么区别。
举例
下面举个简单的例子来说明:
- 方法
class Test {
constructor() {
this.testMethod();
}
testMethod = () => {
console.log('test method');
};
}
const test = new Test(); // test
class Test2 {
constructor() {
this.testMethod();
}
static testMethod = () => {
console.log('test method');
};
}
const test2 = new Test2(); // this.testMethod is not a function
- 属性
class Test {
test = 'test';
constructor() {
console.log(this.test);
}
}
const test = new Test(); // test
class Test2 {
static test = 'test';
constructor() {
console.log(this.test);
}
}
const test2 = new Test2(); // undefined
console.log(Test2.test); // test
console.log(test2.test) // undefined
总结
在class中对于实例属性和方法与静态属性和方法的调用存在差异,对于实例的属性和方法可以通过this来调用,然后实例的属性以及方法都可以通过继承来获得,而静态的属性和方法则必须通过类名来进行调用。并且不会被继承。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用