看完你就懂的 call,bind,apply的区别和使用 【转载】
原文:https://www.runoob.com/w3cnote/js-call-apply-bind.html
先上图
image
obj.objAge; // 17
obj.myFun() // 小张年龄 undefined
image
shows() // 盲僧
比较这两者的this的差别。第一个打印的this 指向 obj, 第二个全局声明的 shows() 函数 this 是window;
1. call(),apply(),bind() 都是用来重定义 this 这个对象的
如:
image
obj.myFun.call(db); // 玛德年龄 99
obj.myFun.apply(db); // 玛德年龄 99
obj.myFun.bind(db)(); // 玛德年龄 99
得出结论,除了bind需要主动调用以外,其他的结果返回都是一致的。
这样可以知道。bind返回的是一个新的函数,需要手动去调用它。
2. 对比call,bind,apply 传参情况下
image obj.myFun.call(db,'成都','上海'); // 玛德 年龄 99 来自成都去往上海
obj.myFun.apply(db,['成都','上海']); // 玛德 年龄 99 来自成都去往上海
obj.myFun.bind(db,'成都','上海')(); // 玛德 年龄 99 来自成都去往上海
obj.myFun.bind(db,['成都','上海'])(); // 玛德 年龄 99 来自 成都,上海 去往 undefined
从上面我们可以看出 call bind apply 这三个函数的第一个参数都是 this 的指向对象,第二个参数差别就来了
call 的参数是直接放进去的,参数之间用逗号隔开
apply 的参数必须是存放在数组里面
bind 除了返回是函数外,它的参数和call一样。
当然,三者的参数不限定是string类型,也可以是其他的类型包括函数/对象
网友评论