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

JavaScript: store function method to variable

本文关键字:存储 变量 方法 函数 JavaScript      更新时间:2023-09-26

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