扩展本机JavaScript数组

有没有办法从JS本机函数继承一个类?

例如,我有一个像这样的JS函数:

function Xarray()
{
    Array.apply(this, arguments);
    //some stuff for insert, add and remove notification
}
Xarray.prototype = new Array();

我试图将它转换为Typescript但我失败了!!

export class Xarray implements Array {
}

编译器要求我定义所有Array接口属性.我知道如果我需要这个Xarray.prototype = new Array();,我必须在TS中扩展Array.

如何在TS中扩展JS本机对象?

解决方法:

我认为没有办法继承像Array这样的现有接口,

export class Xarray implements Array {

}

您应该创建一个函数并使用其原型继承它. Typescript也会接受它类似于javascript.

function Xarray(...args: any[]): void; // required in TS 0.9.5
function Xarray()
{
    Array.apply(this, arguments);
   // some stuff for insert, add and remove notification
}
Xarray.prototype = new Array();

更新:这个问题很好地讨论并在jqfaq.com为此提供了最佳解决方案.

//a dummy class it to inherite array.
class XArray {
    constructor() {
        Array.apply(this, arguments);   
        return new Array();
    }
    // we need this, or TS will show an error,
    //XArray["prototype"] = new Array(); will replace with native js arrray function
    pop(): any { return "" };
    push(val): number { return 0; };
    length: number;
}
//Adding Arrray to XArray prototype chain.
XArray["prototype"] = new Array();

//our Class
class YArray extends XArray {
///Some stuff
}

var arr = new YArray();
//we can use the array prop here.
arr.push("one");
arr.push("two");

document.writeln("First Elemet in array : " + arr[0]);
document.writeln("</br>Array Lenght : " + arr.length);

希望,这可能对你有所帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐