ES6类和扩展内置缓冲区

时间:2017-01-07 21:37:37

标签: javascript node.js ecmascript-6

我尝试在Nodejs中扩展Buffer Object

TypeError: Buffer2.from(...).slice2 is not a function

但看起来我永远不会用新课程覆盖

如何让Buffer2.from返回Buffer2?

ES6类和扩展关键字

无论如何更好的方式,而不是一个全新的课程?

class Buffer2 extends Buffer
{

    constructor(obj, encoding)
    {
        console.log('Buffer2::constructor');

        super(obj, encoding);

        return this;
    }

    slice(start, end)
    {
        console.log('Buffer2::slice');

        return this.slice(start, end)
    }

    slice2(start, length)
    {
        console.log('Buffer2::slice2');

        return this.slice(start, start + length)
    }

    static from(obj, encoding)
    {
        console.log('Buffer2::from');

        return new Buffer2(obj, encoding);
    }
}

Buffer2.prototype.slice = function (start, end)
{
    console.log('Buffer2::slice');

    return this.slice(start, end)
}

Buffer2.prototype.slice2 = function (start, length)
{
    return this.slice(start, start + length)
}

console.log(Buffer2, Buffer2.from('7E1D2C', 'hex').slice2(0, 1));

1 个答案:

答案 0 :(得分:1)

缓冲区作为函数导出,而不是作为类导出,在这里您可以看到源代码buffer.js。所以,你尝试使用ES6类继承不是为了es6类,而是为了函数。如果要扩展本机模块 - 请使用原型继承。但是,当您尝试向本机模块添加一些功能时,我的建议是使用组合内容继承。