我正在寻找一种方法来处理JavaScript中未定义的方法和属性的调用.
这些类似于PHP魔术方法__call,__ callStatic,__ get.
使用此代码的示例可能是:
var myObject = {};
myObject.__call = function (called, args) {
alert(called);
alert(args);
return(true);
}
myObject.meow("kitty", "miau");
Run Code Online (Sandbox Code Playgroud)
这将导致第一个警告对话框显示"喵",第二个显示"kitty,miau".
Proxy可以做到!代理可以做一切!这里给出一个答案:是否有一个javascript相当于python的__getattr__方法?.用我自己的话来改写:
var myObject = new Proxy({},{get(target,name) {
return function() {
alert(name)
console.log(arguments) // alerts are bleh
return true
}
}})
myObject.meow("kitty", "miau") // alerts "meow", logs ["kitty","miau"] to the console, and returns true
Run Code Online (Sandbox Code Playgroud)
查看MDN文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
适用于chrome,firefox和node.js. 缺点:在IE中不起作用 - freakin IE.不久.
Ale*_*ley -1
Javascript 中有一个神奇的函数,叫做 __noSuchMethod__。这是一个例子:
var foo = { __noSuchMethod__ : function(name,params) { alert('invalid function call'); } }
foo.bar();
Run Code Online (Sandbox Code Playgroud)
编辑:正如@jldupont提到的,这实际上只在Rhino和SpiderMonkey(Mozilla的JS引擎)中;ECMAScript 标准不支持它。有一些要求将其纳入 ECMAScript 4 中。
| 归档时间: |
|
| 查看次数: |
2409 次 |
| 最近记录: |