JavaScript オブジェクトの「ファンクター」関数のみを置き換えたいと考えています。次のコードは、問題を示しています。
// PART 1: Declaration
function obj() {
return obj.a + " " + obj.b;
};
obj.a = "a";
obj.b = "b";
confirm(obj()); // output: "a b";
// PART 2: Modification
// now replace only functor
// (not working this way as it replaces the whole object)
obj = function () {
return obj.b + " " + obj.a;
};
confirm(obj()); // expected output: "b a";
PART 1 にアクセスできず、オブジェクトの機能を変更する必要があるため、これが必要です...
JavaScriptでこれを行う方法はありますか?
すべての非表示の属性をコピーしないため、コピー (たとえば、for ループを使用) は機能しません...
更新:未定義ではないコードを修正しました...
UPDATE2:これは、この例ではうまくいくようです: (jQuery が必要です)
obj = $.extend(function() { return obj.b + " " + obj.a; }, obj);
confirm(obj()); // output: "b a";
(しかし、それは私の問題を解決しませんでした...)