簡體   English   中英

如何在 ES5 中實現代理

[英]How to implement Proxy in ES5

讓我們有以下片段:

var obj = {};
obj.doSomething = function(){
    console.log("Hello from obj");
}

我想為此 object 創建一個代理,並且每次調用來自obj的任何方法時,執行其他操作,然后調用實際的obj方法。 假設我希望代理打印消息“從 object [ object ] 調用 [方法名稱]”

例子:

obj.doSomething();

Output:

Calling [doSomething] method from object [obj].
Hello from obj

如何在ES5中實現這一點?

我建議你查看這篇關於 try-catch 代理的文章,根據你自己的需要修改apply()之前的行以及 ES5 的語法

您可以使用內置的 JavaScript 代理 object,如下所示:

 var obj = {}; obj.doSomething = function(){ console.log("Hello from obj"); } const handler = { get: function(target, prop) { console.log(`Calling [${prop}] from object [${target}]`); target[prop](); } }; const proxy = new Proxy(obj, handler); proxy.doSomething

請參閱: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy

在 ES5 中它更復雜,但您可以執行以下操作:

 var obj = {}; obj.doSomething = function(){ console.log("Hello from obj"); } function Proxy(target) { var handler = function(prop) { return function() { console.log("Calling [" + prop + "] from object [" + target + "]"); target[prop](); } } var p = {}; var keys = Object.keys(target); for(var i=0; i < keys.length; i++) { var key = keys[i]; p[key] = handler(key); } return p; } var proxy = new Proxy(obj); proxy.doSomething()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM