Javascript 为什么可以';我不能给变量赋值'push'函数吗?

Javascript 为什么可以';我不能给变量赋值'push'函数吗?,javascript,Javascript,下面是我的第一个示例,它按预期工作: const testObj={ func:(str)=>{console.log(str)} } const testVar=testObj.func; testVar(“工作”)//日志“工作”推送需要知道当您调用它时该将是什么,以便它知道它将被推送到什么位置-通常这将是您调用它的阵列。如果将函数与数组分离,则会丢失该绑定,因为这是通过调用函数的方式设置的。您可以使用以下方法显式地将其重新组合在一起: const数组=[]; const testVar

下面是我的第一个示例,它按预期工作:

const testObj={
func:(str)=>{console.log(str)}
}
const testVar=testObj.func;

testVar(“工作”)//日志“工作”
推送
需要知道当您调用它时该将是什么,以便它知道它将被推送到什么位置-通常这将是您调用它的阵列。如果将函数与数组分离,则会丢失该绑定,因为
这是通过调用函数的方式设置的。您可以使用以下方法显式地将其重新组合在一起:

const数组=[];
const testVar=array.push;
调用(数组,“应添加”);

console.log(数组)
当您执行此操作时
var push=[].push

您可以从数组类型中引用实用函数push,该数组类型在其中使用
this
,因此当您进行此
push('data')

它将使您
无法将未定义或null转换为对象
,因为
它内部的这个
现在是
null |未定义的
因此,如果您想实现这一点,您必须返回上下文,如使用
call
,“apply”或
bind

/*调用示例*/
变量a=[]
var push=a.push;
推送。呼叫(第一棵榆树)
/*举例*/
var a=[];
var push=a.push;
推。应用(a,['第一棵榆树]);
/*绑定示例*/
//注意:Bind不执行函数,但
//它返回一个带有新上下文的新函数
var a=[];
var push=a.push;
var aBindPush=push.bind(a);
推(“第一棵榆树”);

因为上下文丢失
testVar.call(数组,“应该添加”)
@KevinB您能详细说明一下吗?有没有办法不测试函数就知道函数是否需要
这个
上下文
push
具有
[本机代码]
,因此可能没有。@JBis或多或少,您对依赖于对象状态的对象调用的任何方法都需要访问
,因为它在方法中是这样引用自身的。