重写typescript类中包含闭包的javascript
如何在typescript类中重写下面的javascript。 原型中的greet2函数是一个立即调用函数重写typescript类中包含闭包的javascript,typescript,Typescript,如何在typescript类中重写下面的javascript。 原型中的greet2函数是一个立即调用函数 function Greeter(greeting) { this.greeting = greeting; } Greeter.prototype.greet = function() { return "Hello, " + this.greeting; } //an immediately invoke function Greeter.prototype.gre
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);
如何在typescript类中重写下面的javascript
使用属性初始值设定项:
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
greet2 = (() => { // HERE
let blabla = 'hello, ';
return function greet2(foo) {
return blabla + foo;
}
})()
}
let greeter = new Greeter("world");
let button = document.createElement('button');
button.textContent = "Say Hello";
button.onclick = function () {
alert(greeter.greet());
}
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();
实现时,您将能够使用真正的静态初始值设定项。这比原始的效率低:它对实例化的每个对象计算一次,而不是在定义类时计算一次。