オブジェクトを取得して、そこからいくつかのメソッドを削除したいと思います。
つまり、ゲッター/セッターを含むオブジェクトを内部に持っており、外部ユーザーにアクセスを許可したいと考えています。彼らがセッター関数にアクセスできるようにしたくありません。
メソッドを削除して元のオブジェクト参照を変更したくはありませんが、同じオブジェクトを指すがメソッドが少ない新しいオブジェクト参照を作成します。
- どうすればこれを行うことができますか?
- これはデザインパターンですか?
- この種の問題に対するよく知られた解決策はありますか?
私はこの機能の実装を持っています
var readOnly = function(obj, publicData) {
// create a new object so that obj isn't effected
var object = new obj.constructor;
// remove all its public keys
_.each(object, function(val, key) {
delete object[key];
});
// bind all references to obj
_.bindAll(obj);
// for each public method give access to it
_.each(publicData, function(val) {
object[val] = obj[val];
});
return object;
};
実際の例を 参照してください。_.each
_.bindAll
意図されたすべての目的のために、返されるオブジェクトは元のオブジェクトと同じでなければなりませんが、一部のメソッドはもう存在しません。内部this
参照は、どの関数でも壊れてはなりません。プロトタイプ チェーンは壊れてはなりません。
- このような関数の直感的な名前は何でしょうか?
- 現在の実装に注意すべき落とし穴はありますか?