JS中构造函数与Class类的区别
Function vs Class
写法上有区别,本质上无差别
class Clz {
a() {}
b() {}
}
Class的数据类型:
typeof Clz; // 'function'
Class对象本身:
Clz === Clz.prototype.constructor; // true
需要注意的隐晦差异:
function Clzf() {} Clzf.prototype.a = function() {}; Clzf.prototype.b = function() {};
Class内部定义的方法是不可枚举的,但通过构造函数定义的方法是可枚举的。
Object.keys(Clz.prototype); // [] Object.keys(Clzf.prototype); // ['a', 'b']
关于 new.target 属性
该属性可以用来检测是否是使用 new 运算符调用的构造方法或者函数。
通过使用 new 运算法,new.target会返回一个指向构造方法或函数的引用。
普通函数调用,new.target的返回值为undefined.
function Foo() { if (new.target === undefined) { throw new Error('Foo() must be called with new'); } console.log('Foo instantiated with new.'); } Foo(); // 报错 new Foo(); // Foo instantiated with new.
class A { constructor() { console.log(new.target.name); } } class B extends A { constructor() { super(); } } const a = new A(); // 'A' const b = new B(); // 'B'
分类:
JavaScript
标签:
JavaScript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?