javascript - Como criar uma função em uma classe que não vá para a função prototipada em TypeScript?
Quando eu crio uma função dentro da classe, o compilador TS faz com que essa função seja uma função prototipada, por exemplo.
class MyClass {
getExample()
{
}
}
o resultante é
var MyClass = (function() {
function MyClass() {}
MyClass.prototype.getExample = function() {};
return MyClass;
})();
mas o que eu preciso é
function MyClass() {
this.getExample = function() {
}
}
é possível obter uma função assim?
Resposta #1
Dê uma olhada neste link do JQFAQ.com, aqui está a resposta para a sua pergunta 'Como criar uma função em uma classe que não vá para a função prototipada no TypeScript?', e há mais perguntas frequentes disponíveis.
Resposta #2
Eu dei uma olhada no TypeScript (como o playground online... mas prefiro escrever meu próprio JS :P)
Pelo que eu posso perceber, o que você quer fazer pode ser feito com bastante facilidade, eu mesmo tentei algumas coisas e isso funcionou como um charme para mim:
class Greeter {
greeting: string;
closureMethod;
constructor (message: string) {
this.greeting = message;
var that = this;
var closureMethod = function()
{
console.log(that.greeting);
};
this.closureMethod = closureMethod;
}
greet() {
return "Hello, " + this.greeting;
}
}
var greeter = new Greeter("world");
var another = new Greeter('Foobar');
var button = document.createElement('button');
button.innerText = "Say Hello";
button.onclick = function()
{
greeter.closureMethod();
another.closureMethod();
}
document.body.appendChild(button)
O que funcionou, mas ainda mais curto (e isso também funciona)
class Greeter {
greeting: string;
closureMethod;//define property here, no type
constructor (message: string) {
this.greeting = message;
var that = this;
this.closureMethod = function()
{
console.log(that.greeting);
};
}
greet() {
return "Hello, " + this.greeting;
}
}
Ambos produzem o mesmo resultado: um construtor que define um método repetidamente, para cada nova instância (o que, honestamente, não é uma boa ideia).
Como você pode ver, ele acessa a instância usando that, em vez de this, que é o único ponto positivo de criar o mesmo método repetidamente... desde que você tenha um bom motivo para isso. Mas eu não vou me estender em um discurso sobre isso.
O código acima funciona, ele gera uma função construtora como a que você queria.
