废话不多说,先上代码!
1.
2.
从以上可以看出,第一个例子打印出来的结果表明其 this 指向 obj ,第二个例子再全局声明的names() 函数 this 指向的是 window。
接下来讲讲call, apply, bind ,其实它们都是用来改变 this 的指向的。
用上面的例子eg:
由于 bind() 是默认返回一个新的函数,所以必须调用才会执行。
再对比一下其各自传参的情况(参数可以是各种类型)
其实差距不大,从结果可以看出:
- call,bind,apply 这三个函数的第一个参数都是 this 的指向对象;
- 第二个参数,传参数时,
-- call 是直接写进去,参数之间用逗号隔开; eg: obj.myInfo.call(obj1, "广州", "深圳", ...);
-- apply 是要把所有的参数放在数组里再放进去,数组里的参数也使用逗号隔开
eg: obj.myInfo.apply(obj1, ["广州", "深圳", ....]);
-- 而 bind 除了返回的结果是一个新的函数之外,传参时是跟 call 一样的。