我正在寻找计算一次变量的标准方法,然后在每次执行函数的范围内访问它,而不依赖于全局变量。
这似乎是原型属性(变量)的标准用法——但我能在 JS 原型上找到的每个示例都是基于原型方法(函数)的。我唯一能找到的关于在原型中设置属性/变量的问题是来自那些也找不到任何关于这些信息的人的问题,询问这是好的还是坏的做法(tldr:很好,但记住牺牲可读性很少值得获得微小的性能提升)。
我有一种方法可以设置和获取有效的原型属性,但感觉很笨拙,因为它依赖于对函数的引用(本质上var prop = thisfunctionname.prototype.someprop
)。由于我通过反复试验找到了它,我想问一下是否有一种更清洁、更标准的方法可以从函数中获取这些原型属性,而无需回到函数周围的范围并从那里获取函数?
这是一个简单的简单示例:一个虚构的jQuery 插件,它将一个数字添加到另一个数字,然后在带有用户名的句子中返回它。我们只想向用户询问他们的姓名一次,然后将该姓名存储在范围内以供重复使用:
(function($) {
var sum = function( num1,num2 ) {
var result = num1 + num2;
// This works, but seems clunky since it depends on the variable `sum`
// from the scope around this function - is there a better way?
var name = sum.prototype.name;
$(this).text( num1+' plus '+num2+' is '+result+', '+name+'.');
return $(this);
};
var name = prompt('Please enter your name','');
// Is there a better way to set this default variable to be accessible
// in all calls to this function?
sum.prototype.name = name;
$.fn.basicArithmetic = sum;
})(jQuery);
// end of plugin. Example usage...
$('<p/>').basicArithmetic(1,5).appendTo('body');
$('<p/>').basicArithmetic(2,2).appendTo('body');
$('<p/>').basicArithmetic(25,30).appendTo('body');
$('<p/>').basicArithmetic(92.3,15.17).appendTo('body');
现场 jsbin 示例。更现实的现实用例是当属性的计算在内存使用方面很昂贵或具有破坏性(例如,需要在计算期间更改 DOM)。