javascript - Hur skapar man en funktion i en klass som inte går till den prototypade funktionen i TypeScript?
När jag skapar en funktion inne i klassen gör TS-kompilatorn den funktionen till en prototypad funktion, till exempel.
class MyClass {
getExample()
{
}
}
resultanten är
var MyClass = (function() {
function MyClass() {}
MyClass.prototype.getExample = function() {};
return MyClass;
})();
men det jag behöver är
function MyClass() {
this.getExample = function() {
}
}
är det möjligt att få en funktion som denna?
Svar #1
Ta en titt på denna JQFAQ.com-länk, här är svaret på din fråga 'Hur skapar man en funktion i en klass som inte går till den prototypade funktionen i TypeScript?', och det finns fler vanliga frågor tillgängliga.
Svar #2
Jag har tittat på TypeScript (gillar online-lekplatsen… föredrar ändå att skriva min egen JS :P)
Så vitt jag kan se kan det du vill göra göras ganska enkelt, jag har testat några saker själv och detta fungerade som en charm för mig:
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)
Vilket fungerade, men ännu kortare (och detta fungerar också)
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;
}
}
Båda ger samma resultat: en konstruktor som definierar en metod om och om igen, för varje ny instans (vilket, ärligt talat, inte är en bra idé).
Som du kan se, får den tillgång till instansen med that, istället för this, vilket är den enda fördelen med att skapa samma metod om och om igen... så länge du har en bra anledning att göra det. Men jag tänker inte börja ett tal om detta.
Koden ovan fungerar, den genererar en konstruktörsfunktion som den du ville ha.
