Website-Suche

javascript - Wie erstellt man eine Funktion in einer Klasse, die nicht zur prototypisierten Funktion in TypeScript wird?


Wenn ich eine Funktion innerhalb der Klasse erstelle, macht der TS-Compiler diese Funktion zum Beispiel als prototypisierte Funktion.

class MyClass {
    getExample()
    {

    }
}

das Resultierende ist

var MyClass = (function() {
    function MyClass() {}
    MyClass.prototype.getExample = function() {};
    return MyClass;
})();

aber was ich brauche, ist

function MyClass() {

    this.getExample = function() {

    }
}

Ist es möglich, eine Funktion wie diese zu bekommen?

Antwort #1

Schauen Sie sich diesen JQFAQ.com-Link an, hier ist die Antwort auf Ihre Frage ‚Wie erstellt man eine Funktion in einer Klasse, die nicht zur prototypisierten Funktion in TypeScript geht?‘, und es gibt weitere FAQs.

Antwort #2

Ich habe mir TypeScript angeschaut (mag den Online-Playground... bevorzuge es aber, mein eigenes JS zu schreiben :P)
Soweit ich das beurteilen kann, kann das, was du tun möchtest, ziemlich einfach gemacht werden, ich habe selbst ein paar Dinge ausprobiert und das hat bei mir wie ein Traum funktioniert:

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)

Was funktionierte, aber sogar kürzer (und das funktioniert auch)

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;
    }
}   

Beide erzeugen dasselbe Ergebnis: einen Konstruktor, der eine Methode immer wieder definiert, für jede neue Instanz (was, ehrlich gesagt, keine besonders gute Idee ist).
Wie Sie sehen können, greift er auf die Instanz über that zu, anstelle von this, was der einzige Vorteil ist, dieselbe Methode immer wieder zu erstellen... solange man einen guten Grund dafür hat. Aber ich werde hier keinen Vortrag darüber halten.
Der obige Code funktioniert, er erzeugt eine Konstruktionsfunktion wie die, die Sie wollten.