我正在尝试扩展内置JS String
使用 ES6 类的类。
IE。只是从 String 继承。
但是,下面的代码不起作用。
+=
运算符(operator)变更myStr
实际类型返回String
.
AFAIK,JS 中没有运算符继承。
那么,如何避免这种行为呢?
class QString extends String {
isEmpty() {
return this.length === 0;
}
}
var testStr = new QString();
console.log(testStr.isEmpty());
testStr += new QString("abc");
console.log(testStr.isEmpty()); // 'TypeError: testStr.isEmpty is not a function'
附注我知道有机会添加新方法 String.prototype
.
但这是一个不好的做法。
UPD:我明白什么是没有的+
JS中的运算符重载,原来的答案说得很清楚。
然而,它根本没有提到继承和 ES6 类。
我认为至少应该保存已接受的答案。
最佳答案
结构没有任何问题。
该问题是对“+”运算符功能的误解。 JS中的运算符“+”只能产生字符串或数字,不能产生自定义类。
其他 native 类(例如数组)在保留原型(prototype)的同时具有特定的串联方法。
所以你也可以创建它们。
class QString extends String {
isEmpty() {
return this.length === 0;
}
concat(){
return new QString(this + Array.prototype.join.call(arguments, ''));
}
}
var testQStr1 = new QString("abc");
var testQStr2 = new QString("as easy as");
var testQStr3 = new QString("123");
console.log(testQStr1);
test1 = testQStr1.concat(testQStr2,testQStr3);
console.log(test1);
按照这个速度,您还可以构建一个接受字符串作为构造函数参数的简单类,并在不继承 native 的情况下编写您的类。
关于javascript - 如何正确继承String内置类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46992393/