Que*_*mer 9 javascript inheritance prototype typescript
我试图在TypeScript中重写我的一些JavaScript代码.这些代码中的一些引用了我添加到字符串对象原型的扩展.
String.prototype.format = function () {
var formatted = this;
for (var i = 0; i < arguments.length; i++) {
formatted = formatted.replace(
RegExp("\\{" + i + "\\}", 'g'), arguments[i].toString());
}
return formatted;
};
Run Code Online (Sandbox Code Playgroud)
但是,使用类型脚本添加它非常具有挑战性.
我已经看到了一些示例,其中您声明了基本接口的扩展,然后将一个函数分配给原型以匹配接口并提供您的功能.像这样......
interface String {
showString: () => string;
}
String.prototype.showString = (): string {
return this;
};
Run Code Online (Sandbox Code Playgroud)
除了这个错误,因为"_这个没有定义......"
我尝试过的其他事情是创建一个新类来扩展字符串...
export class MoreString extends string {
}
Run Code Online (Sandbox Code Playgroud)
但是这也行不通,因为你只能扩展类,而string/String不是类,而是内置类型.
扩展String并访问扩展方法的最简单方法是什么?
Que*_*mer 11
当天晚些时候,我最终遇到了另一个问题,让我看到了这里发生的事情.从顶部开始,这里是......
TypeScript是建立在JavaScript之上的,所以像@Nypan所说的JavaScript是有效的TypeScript.因此,差异很容易被忽视.
像这样的JavaScript函数引用函数用"this"执行的范围.
var f = function (postFix) {return this + postFix};
Run Code Online (Sandbox Code Playgroud)
要添加TypeScript语法,您需要定义类型
var f = function (postFix: string): string {return this + postFix};
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,这都指的是函数的范围,就像经典JavaScript一样.但是,当我们这样做时,情况就会改变......
var f = (postFix: string): string {return this + postFix};
//or more correctly
var f = (postFix: string): string => {return this + postFix};
Run Code Online (Sandbox Code Playgroud)
当您从参数前面删除该功能时,它不再是经典功能.它变成了"胖箭"功能,显然即使没有使用"=>"语法.在上面的例子中,"this"现在指的是函数存在于C#中的类.
在我尝试将函数分配给字符串的原型时,我省略了function关键字,因此它被解释为"Fat Arrow"函数并尝试将其绑定到类的范围.但是,该类函数不存在于类中并导致错误"_this not defined".
当我添加"function"关键字时,该函数按我的意图解释并正常工作.
interface String {
format: () => string;
}
String.prototype.format = function () : string {
var formatted = this;
for (var i = 0; i < arguments.length; i++) {
formatted = formatted.replace(
RegExp("\\{" + i + "\\}", 'g'), arguments[i].toString());
}
return formatted;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5696 次 |
| 最近记录: |