Crockford は deentityify メソッドにパターンを導入してモジュールを作成します。彼は次のように主張しています。
モジュール パターンは、関数スコープとクローズを利用して、バインドされたプライベートな関係を作成します。この例では、deentityify メソッドだけがエンティティ データ構造にアクセスできます。
彼のカスタム関数を削除するために蒸留すると、コードは次のようになると思います...
String.prototype.deentityify = function() {
var entity = {
quot: '"',
lt: '<',
gt: '>'
};
return function() {
return this.replace(/&([^&;]+);/g, function(a, b) {
var r = entity[b];
return typeof r === 'string' ? r : a;
}); //close function(a,b)
}; //close the returned function
} /* close top level */ (); /* but evaluate it so deentitify becomes the returned fcn(!)
問題は、この追加の間接レイヤーが必要な理由がわからないことです。このコードは同等ではありませんか?
String.prototype.deentityify = function() {
var entity = {
quot: '"',
lt: '<',
gt: '>'
};
// return function() {
return this.replace(/&([^&;]+);/g, function(a, b) {
var r = entity[b];
return typeof r === 'string' ? r : a;
}); //close function(a,b)
// }; //close the returned function
} /* close top level, don't evaluate