从JS函数的原型中获取预计算变量/属性的标准方法
Standard way to get a pre-calculated variable/property from a JS function's prototype
我正在寻找一次计算变量的标准方法,然后在每次执行函数的范围内访问它,而不依赖于全局变量。
这似乎是原型属性(变量)的标准使用-但我能找到的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');
Live jsbin示例。更现实的实际用例是,当属性的计算在内存使用方面很昂贵,或者具有破坏性(例如,需要在计算期间更改DOM)时。
两个不同的答案,真的:
-
通常的方法是在一个作用域函数中使用一个变量(在你的例子中已经有一个);没有原型。
(function($) { var name; name = prompt('Please enter your name',''); function sum( num1,num2 ) { var result = num1 + num2; $(this).text( num1+' plus '+num2+' is '+result+', '+name+'.'); return $(this); } $.fn.basicArithmetic = sum; })(jQuery);
更新JSBin示例| Source
(旁注:我还将匿名函数表达式更改为命名函数声明,但在这种情况下并不重要)
-
jQuery插件中的常用方法是将数据存储在应用插件的元素上。这不适用于您给出的示例,它要求数据对插件是全局的,但通常(并非总是,只是通常)插件只保留特定于实例的信息,这些信息通常存储在元素中(可能通过
data
函数)。
- 如何检查名为id的变量属性
- 变量属性jQuery
- JavaScript 变量属性
- 使用变量属性名称构造 JS 对象的简写方法
- 具有变量属性的Javascript对象:可能吗
- 节点.js全局变量属性被清除
- 玉中的变量属性名称
- Javascript 使用变量属性名称来分配值
- 创建具有变量属性的对象
- Javascript,获取全局变量属性
- 如何在 d3 中获取变量属性
- 使用变量属性名称建立和数组
- JS框架:KineticJS.如何设置变量属性
- TypeScript:类/方法中变量/属性的声明
- 当你在HTML5视频控制器上点击播放时,哪些变量/属性会发生变化
- 从html输入id=“”传递到javascript变量属性;属性”;
- 当传递参数给jquery插件时,如何为javascript对象指定一个变量属性
- RaphaelJS:如果从页面散列中找到变量属性,则更改其属性
- 从JS函数的原型中获取预计算变量/属性的标准方法
- 变量属性=“;测试”;vs Object.defineProperty(变量,“Property”)