javascript - 如何正确继承String内置类

标签 javascript node.js inheritance ecmascript-6 es6-class

我正在尝试扩展内置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/

相关文章:

javascript - 在 TinyMCE textarea 中查找 iframe 输入代码

javascript - 重构 Controller 以使用具有多种功能的 Angular 服务

node.js - Mongoose 模式验证不起作用

javascript - instanceof 在 Node 4 中计算为真,但在 Node 6 中不计算

python - 为什么 Pycharm 不知道将哪些参数传递给继承的 Python 数据类 __init__?

java - 如何在 Java 中对多个继承对象建模

php - 停止 CKEditor 删除 div

javascript - 如何更改关于 GSnewsBar 对象(Ajax API)的 'Google News' 的语言?

javascript - 如何从子模块访问父方法?

c++ - C++ 中的继承 : Error C2011