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');