1

これをクラスで宣言すると

class AlertConfigViewModel {
   DeleteAlert = function (item) {
        if (item) {
            if (confirm('Are you sure you wish to delete this item?')) {
                this.Alerts.remove(item);
            }
        }
        else {
            alert("something is wrong");
        }
    };
}

それは次のようになります:

var AlertConfigViewModel = (function () {
    function AlertConfigViewModel(json) {
      this.DeleteAlert = function (item) {
            if(item) {
                if(confirm('Are you sure you wish to delete this item?')) {
                    this.Alerts.remove(item);
                }
            } else {
                alert("something is wrong");
            }
        };
    }
}

AlertConfigViewModel のコンテキスト外で AlertConfigViewModel を呼び出すと、「これ」は AlertConfigViewModel ではなく、内部関数 AlertConfigViewModel(

4

3 に答える 3

1

通常の方法で関数をクラスのプロパティとして宣言しないのはなぜですか?

class AlertTest {

    private alerts:string = "these-alerts";

    TraceAlert():void{
       console.log(this.alerts); // Logs "these-alerts", wherever it's called from
    };
}

class CallTest {

    private alerts:string = "not-these-alerts";

    constructor() {
        var target = new AlertTest ();  // Creates an instance of your class, as you say.
        target.TraceAlert()
    }
}

var t:CallTest = new CallTest();
// Output: "these-alerts"

FuncName = function()スコーピングの問題以外に、構文が何を提供するのかわかりません。

于 2013-03-14T18:07:12.093 に答える
1

ここに投稿された解決策を見てください: TypeScript and Knockout binding to 'this' issue - lambda function needed?

コンストラクター内でメソッド本体を定義すると、「this」は常にクラスインスタンスを指します-これはトリックですが、非常にクリーンなソリューションです。

于 2013-03-15T11:27:11.790 に答える
0

この「クラス」のインスタンスは 1 つしかないため、このキーワードの使用は時代遅れになると思います。

同様の構文で、次のようなものを試してください。

ClassName = {
    Alerts: someObject,

    DeleteAlert: function (item) {
        if (item) {
            if (confirm('Are you sure you wish to delete this item?')) {
                ClassName.Alerts.remove(item);
            }
        } else {
            alert("something is wrong");
        }
    }
}

インスタンスが必要な場合は、別の構文を使用します...

于 2013-03-14T16:17:47.473 に答える