JavaScript:将函数方法存储到变量

时间:2015-07-28 21:22:13

标签: javascript methods assign

我有一个变量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()

2 个答案:

答案 0 :(得分:2)

这是因为callapply是实例方法。它们对上下文对象this至关重要。

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

答案 1 :(得分:1)

您不需要任何if,只需使用concat

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