3

私はjavascriptが初めてで、このようなことをする方法を見つけようとしています

SomeClass = {

    confirm: function(){
        if(!confirm('Sure?'))
        {
            return false;
        }
    },

    someMethod: function(){
        alert("OK");
    }

}

そして、これが私が実際にやりたいことです

SomeClass.confirm().someMethod();

実際、実際のメソッドの前に .confirm() を追加するだけでアクションを確認する必要があります。それは可能ですか?

4

5 に答える 5

5
SomeClass = {

    confirm: function(){
        if(!confirm('Sure?'))
        {
            this.status=false;
            return this;
        }
    },

    someMethod: function(){
        if(this.status){
            alert("OK");
        }
    }

}

この種のメソッド連鎖は、オブジェクト自体を返す場合にのみ可能です。status を使用して、ユーザーが確認したかどうかを示すことができます。

適切な を持つオブジェクトだけを返すこともできますがsomemethod、メソッドチェーンをこれよりも一般的なものにしたいと思うでしょう:

SomeClass = {

    confirm: function(){
        if(!confirm('Sure?'))
        {
            return {someMethod:function(){alert("Canceled");}};
        }
        return {someMethod:function(){alert("OK");}};
    }

}

ただし、理想的には、コンストラクター関数を使用してオブジェクトを作成し、confirm メソッドがフラグを true または false に設定しての新しいインスタンスを返すことです。SomeClassstatus

于 2012-10-29T13:28:16.473 に答える
3

流暢なインターフェースを行うには、各関数呼び出しからオブジェクト自体を返す必要があります。これは、if ロジックを再構築することを意味します。

SomeClass = {

wasConfirmed: false,

confirm: function(){
    this.wasConfirmed = confirm('Sure?');

    return this;
},

someMethod: function(){
    if(this.wasConfirmed) alert("OK");
}

}
于 2012-10-29T13:29:17.300 に答える
0

説明した方法でメソッド呼び出しをチェーンすることはできません。

SomeClass.confirm().someMethod();

確認メソッドが、定義されたSomeClassオブジェクト以外のものを返す場合。someMethod()

おそらく、jQuery で次のようなものを見たことがあるでしょう。

// trigger click handlers of the element with id="id" and hide it:
$("#id").click().hide();

click()メソッドは、それ自体が呼び出されたのと同じオブジェクトを返し、その返されたオブジェクトでメソッドを呼び出すことができるため、機能hide()ます。jQuery オブジェクト以外を返すメソッドは、jQuery でもチェーンできません (チェーンの最後のメソッドとしてのみ)。

于 2012-10-29T13:29:42.200 に答える
0

試す

var SomeClass = {
  state: null,

  confirm: function(){
    this.state = confirm('Sure?');    

    return this;
  },

  someMethod: function() {
    alert(this.state ? 'OK' : 'Error');
  }
};

SomeClass.confirm().someMethod();
于 2012-10-29T13:27:22.637 に答える
0

私があなたを正しく理解している場合、アクションを「確認可能」にしたい場合は、ユーザーに表示するメッセージと、「確認済み」の場合に実行するアクションを取得するクラスを作成できます。

var Confirmer = {

  confirm: function(msg, action){
       if(confirm(msg)){
          action();
       }
  }

}

次に、次のように呼び出します。

Confirmer.confirm("Are you sure?", function(){ alert("hello"); });

2 番目のパラメーターを使用すると、ユーザーが確認した後に呼び出したい関数を指定できます。

于 2012-10-29T13:32:39.310 に答える