关于call和apply

来源:5-12 函数的间接调用

weixin_慕慕2499132

2020-10-10 16:07:51

 

var name='xm';

var person ={};

person.name = 'xh';

person.getName = function(){

return this.name;

};

Console.log(person.getName());  //xh

Console.log(person.getName.call(window));  //xm 把指针改为window

Console.log(person.getName.apply(window));  //xm 指针改为window

 

老师,这里改变指针,是不是把person对象的person改成了window对象,实际输出的是window.name的值?但是原来的person对象本身是不变的?所以调用person还需要用apply实现同样的效果再一次改变指针。有没有更好的解释?

写回答

1回答

好帮手慕码

2020-10-10

同学你好,大致理解的是正确的。不过描述中有一些问题,如下。

1、call和apply方法,都可以改变方法中this的指向。因此这里说“指针”是不规范的;

http://img.mukewang.com/climg/5f8575c30989009702400047.jpg

2、对的,输出的是window.name的值;

3、是的,person对象没有变化;

4、把window作为参数,传递给了call、apply,那么person.getName方法里的this,指代的就是window,因此两种方法,访问的是window下的name属性,即xm.

可以再理解一下。祝学习愉快~

0

0 学习 · 14456 问题

查看课程