vps搭建asp网站,网站模板吧,电商网站设计与开发,企业工商注册信息查询系统官网个人简介 #x1f440;个人主页#xff1a; 前端杂货铺 #x1f64b;♂️学习方向#xff1a; 主攻前端方向#xff0c;正逐渐往全干发展 #x1f4c3;个人状态#xff1a; 研发工程师#xff0c;现效力于中国工业软件事业 #x1f680;人生格言#xff1a; 积跬步…个人简介 个人主页 前端杂货铺 ♂️学习方向 主攻前端方向正逐渐往全干发展 个人状态 研发工程师现效力于中国工业软件事业 人生格言 积跬步至千里积小流成江海 推荐学习前端面试宝典 Vue2 Vue3 Vue2/3项目实战 Node.jsThree.js JS版算法 个人推广每篇文章最下方都有加入方式旨在交流学习资源分享快加入进来吧 文章目录 ✨✨前言✨✨static施了什么魔法✨✨知识扩展本篇小结 ✨✨前言
大家好这里是前端杂货铺。
前几天在公司做项目的时候发现了一个问题 在带 static 关键字的方法里面调用该类中的其他方法其他方法也需要带 static 关键字。
举个简单的栗子
class Person {static toDo() {this.say();}say() {console.log(to say);}
}Person.toDo();我相信会有一部分小伙伴认为输出的结果是 to say和你一样我一开始也这么认为但实际的输出结果是 是的它报错了它说 say 不是一个方法这不胡扯吗say 怎么可能不是一个方法 先别急我们给 say 方法前面加上 static 关键字让其成为一个静态方法再看看还会不会报错
class Person {static toDo() {this.say();}static say() {console.log(to say);}
}Person.toDo();很神奇加上 static 它就不报错了… ✨✨static施了什么魔法
在了解 static 施了什么魔法之前我们先认识一下 static 吧。
在 MDN 上是这样定义static 的 关键字 static 将为一个类定义一个静态方法。静态方法不是在一个实例之上被调用而是在类自身之上被调用。它们通常是工具函数比如用来创建或者复制对象。 (注“工具函数” 就是指具有某些功能的函数这些函数或者叫做方法就像工具一样当我们需要它们的时候就可以使用它们) 我们简单认识了 static 的定义和用途那么接下来我们来分析一下为什么在方法前加上 static 关键字就不报错呢
生命周期不同 静态方法属于类。 静态方法的生命周期跟相应的类一样长静态方法和静态变量会随着类的定义而被分配和装载入内存中。一直到线程结束静态属性和方法才被销毁。 非静态方法属于对象。 非静态方法的生命周期和类的实例化对象一样长只有当类实例化了一个对象非静态方法才会被创建而当这个对象被销毁时非静态方法也马上被销毁。 所以当对象不存在时非静态方法也不存在静态方法自然也就不能调用一个不存在非静态的方法。 ✨✨知识扩展
现在我们知道了 静态方法不能调用非静态方法那么非静态方法可以调用静态方法吗经过我们上述的分析答案是肯定的
class Person {toDo() {Person.say();}static say() {console.log(to say);}
}let person new Person();
person.toDo();尺有所短寸有所长static 当然也不是完美的…
static的优点 属于类级别的不需要创建对象就可以直接使用全局唯一内存唯一静态变量可以唯一标识某些状态在类加载时候初始化常驻在内存中调用快捷方便 static的缺点 静态方法不能调用非静态的方法和变量.非静态方法可以任意的调用静态方法/变量不能使用this和super关键字属于类级别没有创建对象前不可用this/super 应用场景 静态方法最适合工具类中方法的定义比如文件操作日期处理方法等.静态方法适合入口方法的定义如单例模式因为从外部拿不到构造函数所以定义一个静态的方法获取对象非常有必要.静态变量适合全局变量的定义.如布尔型静态成员变量做控制符 本篇小结
本篇文章我们探讨了静态方法。
静态方法属于类级别的而非静态方法属于对象级别的。通过对 生命周期 的分析我们理解了静态方法中不能调用非静态方法而非静态方法中可以调用静态方法的原因。
之后我们对 static 的优缺点进行了列举对其应用场景有了一定的认识。
好啦本篇文章到这里就要和大家说再见啦祝你这篇文章阅读愉快你下篇文章的阅读愉快留着我下篇文章再祝 参考资料 MDN 官方文档JavaScript 静态方法 【作者三季人 G】百度百科 · 屈原《卜居》