2013-08-19 3 views
0

Я хотел бы знать, как определить getter для объектов по умолчанию, таких как document.cookie.Определение getter для document.cookie

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

Возвращение document.cookie, очевидно, вызывает рекурсию.
Благодаря

+3

Зачем вам это нужно? –

+0

Если вы используете браузер, который может успешно вызвать '__defineGetter__', вам лучше использовать' localStorage'. – zzzzBov

+0

['__defineGetter__'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineGetter) нестандартный, устаревший – Emissary

ответ

0

Попробуйте это:

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

return desc.value; 

Однако, я не уверен, если это будет отражать обновления.

Firefox, IE 10

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

return getter(); 

Это должно работать отлично.

2

Попробуйте что-то вроде этого -

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; 

При добавлении геттеров/сеттеров свойству печенья, он вытирает значение, поскольку дескрипторы не могут иметь как аксессор и значение, так что вы должны сохранить старые кук значение и повторно назначить его после определения аксессуаров.

Смежные вопросы