PHP __call 的 JavaScript 等效项

标签 javascript

在 PHP 中,即使方法不存在,您也可以使用“神奇”__call 函数检测何时调用该方法。

public function __call($methodName, $args)
{
    // do something
}

您可以调用任何方法,名称和参数都会传递给这个神奇的包罗万象的方法。

JavaScript 中是否有类似的技术允许调用任何方法,即使该方法实际上不存在于对象上?

var foo = (function () {
    return {
         __call: function (name, args) { // NOT REAL CODE
             alert(name); // "nonExistent"
         }
    }
}());

foo.nonExistent();

最佳答案

使用 ES6 可以 Proxy API :

var myObj = {};
var myProxy = new Proxy(myObj, {
  get: function get(target, name) {
    return function wrapper() {
      var args = Array.prototype.slice.call(arguments);
      console.log(args[0]);
      return "returns: " + args[0];
    }
  }
});
console.log(myProxy.foo('bar'));

浏览器兼容性可在MDN上获得。截至 2017 年 8 月,除 Internet Explorer 之外的所有浏览器(包括 Microsoft Edge)都支持它。

参见this answer更完整地了解 Proxy。

关于PHP __call 的 JavaScript 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10226064/

相关文章:

javascript - React 无法从传递的 prop 中读取触发器上未定义的属性(读取, 'setState')

javascript - 无法为 Unity 设置 UnityVS/Visual Studio 工具

javascript - 创建新闻提要的概念

javascript - API 在 Postman 中有效,但在浏览器中无效

javascript - Javascript 中的通用内存方法

javascript - slider 计数器长度两位数

JavaScript Onclick 在标签中不起作用

javascript - 单击“保存”按钮时如何阻止我的网格?

javascript - 无法在 CLI 上运行 babel 命令

javascript - 如何将 UL 列表项转换为 JSON 对象?