深入探讨apply()方法的作用

首先我们来看看网上apply()方法的定义:
1. apply()方法能劫持另外一个对象的方法,继承另外一个对象的属性
2.Function.apply(obj,args)方法能接收两个参数
3.obj:这个对象将代替Function类里this对象
4.args:这个是数组,它将作为参数传给Function(args–>arguments)

1.我们使用代码运行一下:
这里写图片描述
2. 从定义中的1、3条来讲Person()继承了obj的属性,并且obj代替了Person()的this对象,那么Person()中的this.sex为‘男’
这里写图片描述
3. 输出结果正确
这里写图片描述
4. 根据定义中的第3条此时Person()中的this指向obj,obj对象只有一个属性 sex,那么Person()中的this.name 应该为undefined
这里写图片描述
5. 输出结果不为undefined,也就是说第3条是不正确的,但是根据第1条,Person()方法继承了obj对象的sex,结果输出为‘木木’也能说的通了。如果是这样,Person()中的this还是指向的Person(),并没有改变。到底Person()中的this改变没有呢?继续测试

这里写图片描述
6.根据定义第1条来看,只是Person()方法继承了obj对象的属性,obj并没有发生变化。obj中只有sex属性没有name属性,obj.name的输出结果应该为undefined
这里写图片描述
7.可是结果并不是我预想的那样,如果根据定义中的第1条,那么不单是Person()继承了obj的属性,obj也继承了Person()的属性。但是这无法准确的解释apply()的作用。从结果来看此时的this无论指向的是Person()和还是obj都不准确,综合定义中的1、3条和测试结果,我认为apply()不只是继承obj的属性,而且还继承了Person()的属性,this指向的既不是obj也不是Person(),指向的应该是继承了Person()和obj属性的一个新的对象。准确的来说,apply()的作用就是合并方法和对象的方法和属性,并将方法和对象的this指向合并后的对象


(如果这种解释不正确,欢迎大家留言探讨)