这是不好的做法:getMyObject()。method()

时间:2013-05-02 20:33:42

标签: javascript

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

getMyObject(){
   //do stuff here
   return object;
}

在函数名称本身上调用方法(不返回任何内容)是不好的做法:

getMyObject().method();

而不是将一个变量赋给返回对象,然后在该变量上调用该方法:

var returnedObject = getMyObject();
returnedObject.method();

我正在使用一个包含许多嵌套框架的html页面,并且我可以访问一个返回其中一个框架的函数。这个框架可能会在我的脚本中的其他函数中多次使用,我想知道我是否可以按照上面提到的方式访问框架,或者是否更好地声明一个全局变量。

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

3 个答案:

答案 0 :(得分:3)

是的,这完全没问题。例如,jQuery也使用它。它返回可以调用方法immediatley的对象。这称为链接。

答案 1 :(得分:1)

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

此外,jQuery代码始终(1):

执行此操作
$('#foo').on('click',function(){});
    /\      \\
    ||       \\  
    ||        \\
function call returns jQ object <============|
                  \\                        ||
                   \\call method "on" upon _||

(1)澄清:我并未声称所有jQ方法都返回对象.attr().prop()。我所说的“所有时间”实际上是OP描述的场景是jQ代码中的非常常见(函数调用,返回对象上的调用方法):

var someString = $($('.foo').get(0)).attr('id');//tricky little bugger, this :)
var aBool = $('#foo').prop('checked');

答案 2 :(得分:0)

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

  1. 如果您多次使用方法(或方法链),则可以使用变量,如果它使代码更清晰。
  2. 如果方法需要很长时间来处理,最好缓存结果。例如,如果您有一个名为calculateResults()的方法,并且它从数据库中提取数据,则需要一些时间。如果数据没有变化,那么每次调用该方法都会产生相应的费用。最好将其存储在变量中并重复使用。
  3. 如果该方法有副作用,您应该多注意多次调用它。每次打电话都会造成这些副作用。同样,作为一个例子,如果你有一个像nextItem()这样的函数进入下一个项目并返回它(一个Java迭代器),那么调用它比预期更多将实际改变结果。在这种情况下,您别无选择,只能存储结果,因为多次调用它会产生不正确的行为。
  4. 否则,链条走开!