JavaScript:将函数用作变量

3
有没有一种方法可以使用分配给变量名的函数,例如获取元素的实际宽度? var xvar = function(){ return $('#y').width()} 然后使用它: console.log(xvar); 而不是 console.log(xvar());

1
通常情况下,你不能在不调用函数的情况下调用函数,但是你可以考虑使用属性获取函数(仅适用于较新的JavaScript解释器)。编辑请参见@pimvdb的答案 :-) - Pointy
3个回答

12

虽然无法使用变量,但是通过对象的属性是可以实现该功能的。这个过程被称为 getter。

var obj = {
  get xvar() { return $('#y').width(); }
};

那么您可以使用:

obj.xvar;  // will run the above function

从理论上讲,使用变量getter的一种方式是当对象的属性反映变量时。例如,window对象。


1
如果我没错的话,它并不完全支持跨浏览器。 - gdoron
1
这是 ES5/6 吗?我从未听说过。不过这很棒。 - Florian Margaine
@FlorianMargaine。谷歌JavaScript getter。 - gdoron
1
@FlorianMargaine。你应该学会如何使用谷歌搜索JavaScript相关信息,添加MDN前缀... 示例 - gdoron
这真是太好了,但IE8... 嗷!:) - Rakamazirem
显示剩余6条评论

2
只要您的函数返回StringNumber,这可以作为非ES5环境下的替代方案:
var xvar = new function(id){ 
              this.toString = 
              this.valueOf = function(){
                   return $(id).width()};
           }('#y');

0

如果我没有错的话,它应该可以工作,因为xvar将存储对立即调用函数结果的引用:

var xvar = (function() { return $('#y').width(); })();
console.log(xvar);

不过在使用这种方式后,你就不能再使用 xvar() 函数了。


1
这基本上相当于 var xvar = $('#y').width();。它不会在访问时运行该函数。 - pimvdb
是的,那只是在第一次分配返回值。你不会得到更新后的宽度版本。 - Erik Reppen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接