我希望能夠提供一個JavaScript函數,只要指定對象的任何屬性被查詢或更新,就會被調用。如果可能的話,那可能嗎?爲了舉個簡單的例子,如果我有obj = { a:3 }
,我希望有一些函數在任何代碼查詢obj.a
時調用,並且能夠返回我想要的任何東西而不是其當前值,例如, 4而不是3.是否有可能在JavaScript中捕獲財產訪問權限?
0
A
回答
2
這很容易,你可以使用Object.prototype.defineProperty
。更多關於它here。
要回答你的問題:
var obj = {};
Object.defineProperty(obj, "a", {
get: function() {console.log("I've been accessed"); return 5;//or whatever value}
});
console.log(obj.a)
更新
以上可以人手。
Object.prototype.addMonitoredGetter = function(property, value, callback) {
Object.defineProperty(this, property, {
writable: false,
get: function() {callback(); return this[property]
};
};
而這裏的回調可能是監控功能。當然,需要默認的參數和檢查,但它應該做到這一點。
0
有適用於Firefox的手錶方法...
o.watch("p", function(...)
+0
太棒了!不幸的是,它是非標準的,甚至在Chrome等其他現代JS引擎中都沒有支持。 – 2013-05-02 13:14:34
+0
是的,但無論如何要知道;) – Christian 2013-05-03 05:22:34
相關問題
- 1. 是否有可能在.NET中捕獲訪問衝突異常?
- 2. OWL:基於價值的財產限制:是否有可能?
- 3. 權限被拒絕獲得財產Window.startLoad
- 4. 是否有可能在財產製定者中強制價值?
- 5. 是否有可能在QML WebView中捕獲JavaScript錯誤?
- 6. 是否有可能在Android中擁有「可選」權限?
- 7. 是否有可能訪問
- 8. 不同類別的財產訪問權限不同
- 9. 是否有可能在Dynamics CRM 2011中查找拒絕顯示訪問權限時缺少的權限
- 10. 的Javascript,不能存取權限JSON財產
- 11. 是否有可能產生SAS(共享訪問簽名)具有寫權限在蔚藍的Blob存儲
- 12. 我們是否可以使用具有訪問權限權限的algolia搜索
- 13. 訪問NSUInteger財產
- 14. 訪問Html.ActionLink財產
- 15. 是否有可能綁定伊娃沒有財產聲明?
- 16. 是否有可能捕獲ExceptionInInitializerError?
- 17. 是否有可能捕獲net :: ERR_BLOCKED_BY_CLIENT?
- 18. 的JavaScript訪問來自withing財產
- 19. JavaScript的財產訪問與for..in
- 20. 在BroadcastReceiver中獲取訪問權限
- 21. 是否與財產
- 22. CoffeeScripts類 - 在回調中訪問財產
- 23. 獲取SYNCHRONIZE訪問權限
- 24. 是否有可能在Javascript
- 25. 是否有可能無限期維護授權引用(可可)
- 26. 是否有可能通過應用限制iOS訪問?
- 27. 是否有單一權限類型來訪問所有數據
- 28. MS測試 - 訪問私有財產
- 29. 有沒有可能隱藏財產
- 30. 在JavaScript對象文字中獲得設置訪問權限
您可惜不能兼得的內在價值和getter/setter方法,讓你的二傳手代碼就會失敗,因爲它將遞歸調用自身,直到瀏覽器崩潰或代碼失敗。 – 2013-05-02 11:01:11
是的,只有它纔會允許對財產訪問進行監控。儘管如此,它可能會讓很多物業煩人。 – 2013-05-02 11:11:53
這聽起來很有趣,我會對它進行試驗......我想要做的是有一個可用的財產,但推遲計算它的價值,直到它是必需的(如果它是必需的)。是的,當然,這可以使用標準的getter函數來完成,但是我使用了一個依賴於直接查詢屬性的現有庫,因此這種方法。非常感謝您的幫助! – 2013-05-02 13:16:55