2013-08-19 16 views
0

我想知道如何爲像document.cookie這樣的默認對象定義一個getter。爲document.cookie定義一個getter

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

試試這個:

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

return desc.value; 

但是,我不知道這是否會反映更新。

火狐,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; 

當您添加getter/setter方法到cookie屬性,它擦去值,因爲描述不能有兩個訪問和值,所以你必須保存舊Cookie值並在定義訪問器之後重新分配它。