0

document.cookie のようなデフォルト オブジェクトのゲッターを定義する方法を知りたいです。

document.__defineGetter__("cookie", function(newv) {
   console.log('accessing cookie'); 
  //what to return here??
 });

document.cookie を返すと、明らかに再帰が発生します。
ありがとう

4

2 に答える 2

3

このようなことを試してください -

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 値を保存して、アクセサーを定義した後に再割り当てする必要があります。

于 2013-11-25T21:35:57.457 に答える
0

これを試して:

クロム

var desc = Object.getOwnPropertyDescriptor(document, 'cookie');

return desc.value;

ただし、これが更新を反映するかどうかはわかりません。

Firefox、IE10

var getter = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(document), 'cookie').get.bind(document)

return getter();

これは完全に機能するはずです。

于 2013-08-19T15:13:52.150 に答える