1

我想通过较短的别名调用一些函数以最小化代码大小。

(function(){
    var t = document.getElementById;
    t('element-id');
})();

这段代码给出了Error: Could not convert JavaScript argument. 为什么?

4

3 回答 3

4

当您将函数分配给不同的变量时,它的this值会发生变化。由于getElementById期望this是一个元素,因此您会遇到错误。

如果您在可以使用的环境中,请bind使用它:

(function(){
    var t = document.getElementById.bind(document);
    t('element-id');
})();

这将确保t'this将保留document对象。


如果不能使用bind,则必须创建一个中间函数:

(function() {
    function t (id) {
        document.getElementById(id);
    }
    t('element-id');
})();
于 2013-02-14T03:40:24.477 回答
3

正如约瑟夫所说,this价值发生了变化,它破坏了功能。尝试以下操作:

var t = function(i) {return document.getElementById(i);};
于 2013-02-14T03:41:22.577 回答
0

所以在这种情况下,你可以做

let t = (id) => document.getElementById(id);
t(“myElement”)

这意味着使用返回对象的箭头函数,就像 document.getElementById(“”) 一样。

于 2021-09-20T04:17:18.060 回答