document.cookie のようなデフォルト オブジェクトのゲッターを定義する方法を知りたいです。
document.__defineGetter__("cookie", function(newv) {
console.log('accessing cookie');
//what to return here??
});
document.cookie を返すと、明らかに再帰が発生します。
ありがとう
document.cookie のようなデフォルト オブジェクトのゲッターを定義する方法を知りたいです。
document.__defineGetter__("cookie", function(newv) {
console.log('accessing cookie');
//what to return here??
});
document.cookie を返すと、明らかに再帰が発生します。
ありがとう
このようなことを試してください -
var old_cookie = document.cookie;
Object.defineProperty(document, 'cookie', {
get: function() {
console.log('Getting cookie');
return this._value;
},
set: function(val) {
console.log('Setting cookie', arguments);
this._value = val;
return this._value;
}
});
document.cookie = old_cookie;
Cookie プロパティに getter/setter を追加すると、記述子はアクセサーと値の両方を持つことができないため、値が消去されます。そのため、古い Cookie 値を保存して、アクセサーを定義した後に再割り当てする必要があります。
これを試して:
var desc = Object.getOwnPropertyDescriptor(document, 'cookie');
return desc.value;
ただし、これが更新を反映するかどうかはわかりません。
var getter = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(document), 'cookie').get.bind(document)
return getter();
これは完全に機能するはずです。