JavaScript:允许访问您尝试访问的 attr 的 __defineGetter__ 版本?

标签 javascript getattr

我一直在寻找 JavaScript 中 Python 的 __getattr__ 的替代品,这里的几个答案提到了 Firefox 的 __defineGetter__。这不仅不跨浏览器兼容,而且实际上不允许您像下面的伪代码那样做任何真正有用的事情:

var api = function()
{
    var __getattr__ = function(attr, args)
    {
        var api_method = attr;
        $post(url, api_method, args, function(response){alert(response)});
    }
}

// Now api.getprofile('foo', 'spam'); would call the following code behind the scenes:
$post(url, 'getprofile', ['foo', 'spam'], function(response){alert(response)});

显然这是伪代码,但是有没有已知的方法可以在 JavaScript 中真正做到这一点?我知道我可以很好地使用手动版本(最后一行代码),但是当您达到大约 30 个函数时,这会变得非常乏味。

最佳答案

var api = {
    getAttr:function(attr) {
        var args = [];
        for (var i = 1; i < arguments.length; i++) {
            args.push(arguments[i]);
        }
        $post(url, attr, args, function(response){alert(response)});
    }
};

这不是最漂亮的东西,而且行为也不太一样,但它应该可以工作。你必须这样调用它: api.getAttr('getprofile', 'foo', 'spam');

关于JavaScript:允许访问您尝试访问的 attr 的 __defineGetter__ 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2240645/

相关文章:

javascript - 如何阻止 JS 驱动的整页滚动跳转到开始/结束

python - 是否有像 __getattr__ 这样的函数被类变量调用?

Python:将字符串转换为函数名; getattr 还是等于?

javascript - 为什么我的菜单没有下拉菜单?

javascript - AngularJS 中的传单 map 交互

python - 玛雅 python : getting the position of selected object using getAttr

使用自定义 __getattr__ 和 __setattr__ 的 Python 深度复制

python - Python 获取属性值失败

javascript - 为什么 readdirSync 会自动对结果进行排序?

javascript - jquery SlideDown/slideUp 与多个 div