Javascript多种方法

时间:2012-10-29 13:25:53

标签: javascript

我是javascript的新手,我正在试图弄清楚如何做这样的事情

SomeClass = {

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

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

}

这就是我真正想做的事情

SomeClass.confirm().someMethod();

实际上我需要通过在实际方法前添加.confirm()来确认操作。这甚至可能吗?

5 个答案:

答案 0 :(得分:4)

SomeClass = {

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

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

}

这种方法链接只有在您返回对象本身时才有可能。您可以使用状态来指示用户是否已确认。

你也可以只返回一个具有相应somemethod的对象,虽然我怀疑你希望方法链接比这更通用:

SomeClass = {

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

}

理想情况下,您可以通过构造函数创建对象,并且confirm方法将返回SomeClass status标志设置为true的实例或假的。

答案 1 :(得分:3)

要执行fluent interface,您需要从每个函数调用返回对象本身。这意味着重构你的if逻辑:

SomeClass = {

wasConfirmed: false,

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

    return this;
},

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

}

答案 2 :(得分:0)

尝试

var SomeClass = {
  state: null,

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

    return this;
  },

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

SomeClass.confirm().someMethod();

答案 3 :(得分:0)

您将无法以您描述的方式链接方法调用:

SomeClass.confirm().someMethod();

如果您的confirm方法返回除定义SomeClass的{​​{1}}对象以外的任何内容。

您可能在jQuery中看到过类似的内容:

someMethod()

它的工作原理是因为// trigger click handlers of the element with id="id" and hide it: $("#id").click().hide(); 方法返回了它本身被调用的同一个对象,因此可以在那个返回的对象上调用click()方法。返回除jQuery对象以外的任何东西的方法即使在jQuery中也无法链接(仅作为链中的最后一个方法)。

答案 4 :(得分:0)

如果我理解正确,您希望任何操作都是“可确认的”,那么您可以编写一个类,其中显示用户显示的消息,以及如果“已确认”则执行的操作

var Confirmer = {

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

}

然后你可以这样称呼它:

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

使用第二个参数在用户确认后调用任何函数。