0

我想知道如何为 document.cookie 等默认对象定义 getter。

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;

当您将 getter/setter 添加到 cookie 属性时,它会擦除​​该值,因为描述符不能同时具有访问器和值,因此您必须保存旧的 cookie 值并在定义访问器后重新分配它。

于 2013-11-25T21:35:57.457 回答
0

尝试这个:

铬合金

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

return desc.value;

但是,我不确定这是否会反映更新。

火狐,IE 10

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

return getter();

这应该可以完美地工作。

于 2013-08-19T15:13:52.150 回答