ES6 Class 转为 ES5
js
class Test {
constructor(name, age) {
this.name = name;
this.age = age;
}
getName() {
console.log(this.name);
}
}基础转换
js
'use strict'; // es6 class 在严格模式下执行
function Test(name, age) {
this.name = name;
this.age = age;
}
Test.prototype.getName = function () {
console.log(this.name);
};class 只能使用 new 调用
判断函数调用的方式
js
"use strict"; // es6 class 在严格模式下执行
function Test(name, age) {
// 验证this的指向
const isCalledWithNew = this instanceof Test;
if (!isCalledWithNew) {
throw new TypeError(
"Class constructor Test cannot be invoked without 'new'"
);
}
this.name = name;
this.age = age;
}
Test.prototype.getName = function () {
console.log(this.name);
};class 方法成员不可被枚举

示例中 class 的方法 getName 不可枚举
js
'use strict'; // es6 class 在严格模式下执行
function Test(name, age) {
// 验证this的指向
const isCalledWithNew = this instanceof Test;
if (!isCalledWithNew) {
throw new TypeError("Class constructor Test cannot be invoked without 'new'");
}
this.name = name;
this.age = age;
}
Object.defineProperty(Test.prototype, "getName", {
value: function () {
console.log(this.name);
},
enumerable: false,
});
Test.prototype.getName = function () {
console.log(this.name);
}; class 方法成员不能使用 new 调用

js
"use strict"; // es6 class 在严格模式下执行
function Test(name, age) {
// 验证this的指向
const isCalledWithNew = this instanceof Test;
if (!isCalledWithNew) {
throw new TypeError(
"Class constructor Test cannot be invoked without 'new'"
);
}
this.name = name;
this.age = age;
}
Object.defineProperty(Test.prototype, "getName", {
value: function () {
// 不能使用 new 调用
if (!(this instanceof Test)) {
throw new TypeError("instance.getName is not a constructor");
}
console.log(this.name);
},
enumerable: false,
});