0

我目前正在尝试在需要嵌套方法的咖啡脚本中制作一些东西。我想要这样的东西。

class test
    constructor: (one, two, three) ->
        #do something with one two and three
    @method1: (one, two) ->
         #do something with vars
         @method2: (one, two, three, four) ->
            #do something with vars
            @method3:() ->
                    #do something

我希望能够运行这样的方法。

main = new test(one, two, three)
meth1 = main.method1(four, five)
meth2 = meth1.method2(six, seven, eight, nine)
meth3 = meth2.method3()

例如,我还希望能够返回值。

variable = new test(one, two, three).method1(four, five).something

我不想要的一件事是从一个地方都可以访问不同的方法,例如,我不希望这种情况发生:

new test(one, two, three).method3()

我不知道这是否会有所帮助,但我想要执行的操作仅与页面上的 HTML 交互。

一段时间以来,我一直在尝试各种方法来做到这一点,但到目前为止,还没有完全奏效。

4

3 回答 3

1

这不叫嵌套,而是链接test要启用它,您必须从可链接的方法返回实例。这可以是输入实例(您对其进行了变异),也可以是从输入中复制某些属性并更改其他属性(不改变输入)的新实例。

查看这些问题/答案以获取实际示例。

于 2013-04-17T13:17:41.513 回答
0

如果您希望能够链接您的方法,您可以返回this每个方法的返回值。但是,如果您只想按特定顺序访问某些方法,则可以返回object仅实现所需接口的 an 而不是返回this

在下面的示例中,onlymethod1可以在Test实例上访问,但调用的结果method1object具有method2函数的。此外,每个返回的对象都有一个getResult函数,允许您检索链接函数的结果并重置@result为初始结果。

还有其他方法可以保留函数调用状态,例如使用curried函数。

class Test
    constructor: (one, two, three) ->
        @initialResult = @result = one + two + three
        @getResult = =>
            result = @result
            @result = @initialResult
            result
    method1: (four, five) ->
        @result += four + five

        getResult: @getResult
        method2: (six, seven, eigth, nine) =>
            @result += six + seven + eigth + nine
            getResult: @getResult


t = new Test(1, 2, 3)

console.log(t.getResult())

console.log(t.method1(4, 5).method2(6, 7 ,8, 9).getResult())

console.log(t.method1(1, 2).getResult())

console.log(typeof t.method2) #undefined
于 2013-04-17T13:32:01.433 回答
0

虽然已经涵盖了方法链接,但我认为您尝试做的事情可以通过柯里化/部分应用程序来完成。如果你正在写一些更实用的东西,你基本上想要meth1接受一些参数和 return meth2,这将接受更多的参数和 return meth3,这将使用从 传入的所有参数来做一些事情meth1

这是几篇关于柯里化/部分应用程序的博客文章。

http://ejohn.org/blog/partial-functions-in-javascript/

http://www.drdobbs.com/open-source/currying-and-partial-functions-in-javasc/231001821

于 2013-04-17T16:20:52.910 回答