変数を一度計算してから、グローバル変数に依存せずに、関数のすべての実行のスコープ内でそれにアクセスする標準的な方法を探しています。
これは、プロトタイプのプロパティ(変数)の標準的な使用法のようですが、JSプロトタイプで見つけることができるすべての例は、プロトタイプのメソッド(関数)に基づいています。プロトタイプでプロパティ/変数を設定することについて私が見つけることができる唯一のことは、これらについての情報を見つけることができなかった誰かからの質問であり、それが良いか悪いかを尋ねます(tldr:それは問題ありませんが、読みやすさを犠牲にする価値はめったにないことを覚えておいてくださいわずかなパフォーマンスの向上のために)。
動作するプロトタイププロパティを設定して取得する方法がありますが、関数への参照に依存するため(基本的にvar prop = thisfunctionname.prototype.someprop
)不格好に感じます。試行錯誤で見つけたので、関数のスコープに戻ってそこから関数を取得することなく、関数内からこれらのプロトタイププロパティを取得するためのよりクリーンで標準的な方法があるかどうかを尋ねたいと思います。
簡単な例を次に示します。別の数値に数値を追加し、それをユーザーの名前の文で返す架空のjQueryプラグインです。ユーザーに名前を1回だけ尋ねてから、その名前をスコープ内で再利用できるように保存します。
(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を変更する必要があります)。