typescript - 在打字稿类中重写包含闭包的javascript
问题描述
如何在打字稿类中重写以下javascript。原型中的 greet2 函数是一个立即调用函数。
function Greeter(greeting) {
this.greeting = greeting;
}
Greeter.prototype.greet = function() {
return "Hello, " + this.greeting;
}
//an immediately invoke function
Greeter.prototype.greet2 = function{
let blabla = 'hello, ';
return function greet2(foo) {
return blabla + foo;
}
}();
let greeter = new Greeter({message: "world"});
let button = document.createElement('button');
button.textContent = "Say Hello";
button.onclick = function() {
alert(greeter.greet2('tom'));
};
document.body.appendChild(button);
解决方案
您可以声明该属性,然后在原型上对其进行初始化:
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
greet2!: (foo) => string; // in case of strictPropertyInitialization
static staticInitializer() {
// Here we have access to non-public members of `Greeter`.
Greeter.prototype.greet2 = function(){
let blabla = 'hello, ';
return function greet2(this: Greeter, foo) {
return blabla + foo;
}
}();
}
}
Greeter.staticInitializer();
实施此建议后,您将能够使用真正的静态初始化程序。
推荐阅读
- node.js - Mongo 聚合查询优化
- python - 使用 .loc() 时的 Pandas KeyError
- java - 特定时间触发时间需要多线程?
- polygon - 矢量 shp 指向具有多边形窗口的 ppp spatstat
- python - 如何在 Python 中使用 Selenium 从 github 页面 url 中抓取贡献者姓名
- mongodb - Sync two Mongodb Databases and have the client connect to the closest one
- react-admin - React Admin - 从服务器获取附加参数并传递给列表视图道具
- pyramid - 金字塔路由到类方法
- ansible - ansible如何获得最后2位数字
- python - 使用 Python 在有限大小的图像中查找未填充的圆圈