JavaScript: 存储函数方法到变量

JavaScript: store function method to variable

我有一个变量a,它可以是一个对象或一个对象数组。我有一个数组 array

我想将 a 附加到 array,所以我想到使用 Array.prototype.push.callArray.prototype.push.apply 和三元运算符,如下所示:

var a = "hello"; // or var a = ["hello", "world"];
var array = [];
var append = ($.isArray(a)) ? Array.prototype.push.apply : Array.prototype.push.call;
append(array, a); // Uncaught TypeError: undefined is not a function

($ 为 jQuery)

我是 JavaScript 的新手,我想这是行不通的一个很好的理由,但我找不到它。 applycall 不能赋值给一个变量吗? (它们不是真正的函数?)或者调用 append() 时缺少什么?

注意:我知道我可以用 if/else 做到这一点,但我更想了解为什么我不能将这些方法分配给变量并调用它。


次要问题:我想这样做是因为我从 JSON API 得到 a 如果我理解正确的话, JSON 不能包含单个对象的数组。虽然我觉得我正在尝试做的事情一定很常见,但我也找不到其他开发人员如何处理这个问题。有没有比测试 a 是否为数组并相应地使用 apply() 更好的方法?

发生这种情况是因为 callapply 是实例方法。它们对上下文对象至关重要 this.

最终你应该执行 append.call(Array.prototype.push, array, a) 因为 callapply 需要函数 push 作为 this

传递

不需要if,直接用concat

var array = [];
var a = "hello"; // or var a = ["hello", "world"]
array = array.concat(a);