JavaScript: 存储函数方法到变量
JavaScript: store function method to variable
我有一个变量a
,它可以是一个对象或一个对象数组。我有一个数组 array
。
我想将 a
附加到 array
,所以我想到使用 Array.prototype.push.call
或 Array.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 的新手,我想这是行不通的一个很好的理由,但我找不到它。 apply
或 call
不能赋值给一个变量吗? (它们不是真正的函数?)或者调用 append()
时缺少什么?
注意:我知道我可以用 if/else
做到这一点,但我更想了解为什么我不能将这些方法分配给变量并调用它。
次要问题:我想这样做是因为我从 JSON API 得到 a
如果我理解正确的话, JSON 不能包含单个对象的数组。虽然我觉得我正在尝试做的事情一定很常见,但我也找不到其他开发人员如何处理这个问题。有没有比测试 a
是否为数组并相应地使用 apply()
更好的方法?
发生这种情况是因为 call
和 apply
是实例方法。它们对上下文对象至关重要 this
.
最终你应该执行 append.call(Array.prototype.push, array, a)
因为 call
或 apply
需要函数 push
作为 this
传递
不需要if,直接用concat
var array = [];
var a = "hello"; // or var a = ["hello", "world"]
array = array.concat(a);
我有一个变量a
,它可以是一个对象或一个对象数组。我有一个数组 array
。
我想将 a
附加到 array
,所以我想到使用 Array.prototype.push.call
或 Array.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 的新手,我想这是行不通的一个很好的理由,但我找不到它。 apply
或 call
不能赋值给一个变量吗? (它们不是真正的函数?)或者调用 append()
时缺少什么?
注意:我知道我可以用 if/else
做到这一点,但我更想了解为什么我不能将这些方法分配给变量并调用它。
次要问题:我想这样做是因为我从 JSON API 得到 a
如果我理解正确的话, JSON 不能包含单个对象的数组。虽然我觉得我正在尝试做的事情一定很常见,但我也找不到其他开发人员如何处理这个问题。有没有比测试 a
是否为数组并相应地使用 apply()
更好的方法?
发生这种情况是因为 call
和 apply
是实例方法。它们对上下文对象至关重要 this
.
最终你应该执行 append.call(Array.prototype.push, array, a)
因为 call
或 apply
需要函数 push
作为 this
不需要if,直接用concat
var array = [];
var a = "hello"; // or var a = ["hello", "world"]
array = array.concat(a);