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'
复制代码

 

posted @   樊顺  阅读(624)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示