Javascript 这种做法不好吗:getMyObject().method()

Javascript 这种做法不好吗:getMyObject().method(),javascript,Javascript,假设我有一个返回对象的函数: getMyObject(){ //do stuff here return object; } 调用函数名本身的方法(不返回任何内容)是否是一种错误的做法: getMyObject().method(); 不是将变量分配给返回对象,然后对该变量调用方法: var returnedObject = getMyObject(); returnedObject.method(); 我正在处理一个有许多嵌套框架的html页面,并且我可以访问一个返回其中一个

假设我有一个返回对象的函数:

getMyObject(){
   //do stuff here
   return object;
}
调用函数名本身的方法(不返回任何内容)是否是一种错误的做法:

getMyObject().method();
不是将变量分配给返回对象,然后对该变量调用方法:

var returnedObject = getMyObject();
returnedObject.method();
我正在处理一个有许多嵌套框架的html页面,并且我可以访问一个返回其中一个框架的函数。这个框架可能会在我脚本中的其他函数中使用多次,我想知道是否可以按照上面要求的方式访问这个框架,或者最好声明一个全局变量


*编辑:*啊,我还没有机会使用jQuery。很高兴知道

是的,这完全可以。例如,jQuery也使用了这一点。它返回可以立即调用方法的对象。这叫做链接。

是的,这完全可以。例如,jQuery也使用了这一点。它返回可以立即调用方法的对象。这称为链接。

通常不会。像这样的链接方法调用通常更简单、更优雅、更易于阅读。但是,在一些情况下,最好使用变量

  • 如果您多次使用一个方法(或方法链),那么可以使用一个变量(如果它使代码更简洁)
  • 如果处理该方法需要很长时间,最好缓存结果。例如,如果您有一个名为
    calculateResults()
    的方法,并且它从数据库中提取数据,这需要一些时间。如果数据没有改变,那么每次调用该方法都会产生相应的成本。最好将其存储在变量中并重用它
  • 如果该方法有副作用,则应小心多次调用。这些副作用会在你每次调用它时产生。同样,作为一个例子,如果您有一个像
    nextItem()
    这样的函数,它前进到下一个项并返回它(一个Java迭代器),那么调用它实际上会改变结果。在这种情况下,您别无选择,只能存储结果,因为多次调用它将产生不正确的行为

  • 否则,就把锁链锁起来

    通常不会。像这样的链接方法调用通常更简单、更优雅、更易于阅读。但是,在一些情况下,最好使用变量

  • 如果您多次使用一个方法(或方法链),那么可以使用一个变量(如果它使代码更简洁)
  • 如果处理该方法需要很长时间,最好缓存结果。例如,如果您有一个名为
    calculateResults()
    的方法,并且它从数据库中提取数据,这需要一些时间。如果数据没有改变,那么每次调用该方法都会产生相应的成本。最好将其存储在变量中并重用它
  • 如果该方法有副作用,则应小心多次调用。这些副作用会在你每次调用它时产生。同样,作为一个例子,如果您有一个像
    nextItem()
    这样的函数,它前进到下一个项并返回它(一个Java迭代器),那么调用它实际上会改变结果。在这种情况下,您别无选择,只能存储结果,因为多次调用它将产生不正确的行为

  • 否则,就把锁链锁起来

    在您的示例中,方法链接是更好的实践。如果函数返回一个对象,您想在该对象上调用一个方法,但在调用该方法后不需要引用该对象,则不要将其赋给变量

    此外,jQuery代码一直都在这样做(1):


    在您的示例中,方法链接是更好的实践。如果函数返回一个对象,您想在该对象上调用一个方法,但在调用该方法后不需要引用该对象,则不要将其赋给变量

    此外,jQuery代码一直都在这样做(1):


    我看不出有什么不对。这就像带有链接函数的jQuery,例如
    .add(object).hide().show()
    。一般来说,如果你知道为什么要这样做,并且你可以证明你的推理是正确的,那么这不是一个坏习惯。也就是说,您可能希望避免在不需要的地方引入复杂性。如果您选择使用全局变量,我建议您创建一个全局对象,在其中存储所有“共享”变量。当我使用jQuery时,我通常在jQuery本身上附加一个名称空间,并在该对象中存储共享变量。例如:jQuery.myApp={}。代价是缓慢的可变访问和全球污染。我看不出这有什么错。这就像带有链接函数的jQuery,例如
    .add(object).hide().show()
    。一般来说,如果你知道为什么要这样做,并且你可以证明你的推理是正确的,那么这不是一个坏习惯。也就是说,您可能希望避免在不需要的地方引入复杂性。如果您选择使用全局变量,我建议您创建一个全局对象,在其中存储所有“共享”变量。当我使用jQuery时,我通常在jQuery本身上附加一个名称空间,并在该对象中存储共享变量。例如:jQuery.myApp={}。代价是缓慢的可变访问和全球污染。你能更详细地解释第2点和第3点吗?顺便说一句,我不同意第1点,因为如果你让你的方法名具有完整的含义,它会帮助你更容易地阅读代码(正如你已经说过的)。@Zim84 Done,希望这样更好。@JakeKing第2点在我看来是无效的。没有什么可以阻止某人在chain方法中缓存并检查缓存,而不是执行一些昂贵的操作。@FeistyMango这是真的,但它不缓存的可能性是相等的。当然,如果你知道它会被缓存,那没关系,但是如果你不知道。。。此外,您可以知道有很多操作不会自动缓存。甚至可能是你自己写的东西。在
    $('#foo').on('click',function(){});
        /\      \\
        ||       \\  
        ||        \\
    function call returns jQ object <============|
                      \\                        ||
                       \\call method "on" upon _||
    
    var someString = $($('.foo').get(0)).attr('id');//tricky little bugger, this :)
    var aBool = $('#foo').prop('checked');