1

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

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

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

getMyObject().method();

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

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

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

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

4

3 回答 3

3

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

于 2013-05-02T20:35:40.220 回答
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');
于 2013-05-02T20:52:43.257 回答
0

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

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

否则,锁链!

于 2013-05-02T20:37:45.803 回答