【发布时间】:2019-10-02 18:38:12
【问题描述】:
从 ES6 开始,类可以扩展特殊对象,如函数、数组和原始包装器。很简单:写一个扩展相应类型的类并使用它:
class MyNumber extends Number {
constructor() {
super(42)
}
square() {
return this ** 2
}
}
var x = new MyNumber()
console.log(typeof x, x + "", x.square() + "")
但 EcmaScript 也有一些新类型,例如 Symbol 和 BigInt。它们仍然具有非原始包装类型,但您不能将它们用作构造函数,并且需要将原始包装显式包装到对象中:
var x = BigInt("42")
var y = Object(x)
console.log(typeof x, x + "", x + 1n + "")
console.log(typeof y, y + "", y + 1n + "")
try {
var z = new BigInt("42")
} catch (e) {
console.log(e.message)
}
如果我想扩展这样的包装器怎么办?定义一个类可以正常工作,但是如果我尝试创建一个对象,它会抛出 super 调用:
class MyBigInt1 extends BigInt {
constructor() {
super("42")
}
}
try {
var x = new MyBigInt1()
} catch (e) {
console.log(e.message)
}
class MyBigInt2 extends BigInt {
constructor() {
}
}
try {
var x = new MyBigInt2()
} catch (e) {
console.log(e.message)
}
【问题讨论】:
标签: javascript inheritance ecmascript-6