var obj1 = {
name: 'obj1',
getName () {
console.log(this.name)
}
}
var obj2 = {
name: 'obj2',
getName () {
console.log(this.name)
}
}
obj1.getName() // obj1
1.bind:不会执行原函数
(1)bind方法直接使用没反应,只是改变this指向obj2,不会立即执行;
(2)需要()手动执行方法 ,生成一个全新的函数;
(3)可以传多个参数;
obj1.getName.bind(obj2) // 没反应,只是改变this指向obj2,不会立即执行,需要手动执行方法
obj1.getName.bind(obj2)() // ()手动执行生成一个全新的函数
obj1.getName.bind(obj2, 'aaa', 'bbb', 'ccc')() // 可以传无限多个参数
2.call:会执行原函数
(1)改变this指向obj2,会立即执行;
(2)可以传多个参数
obj1.getName.call(obj2) // obj2,改变this指向obj2,会立即执行
obj1.getName.call(obj2, 'aaa', 'bbb', 'ccc') // 可以传无限多个参数
3.apply:会执行原函数
(1)改变this指向obj2,会立即执行
(2)两个参数(一个对象+一个数组)
obj1.getName.apply(obj2) // obj2,改变this指向obj2,会立即执行
obj1.getName.apply(obj2, ['aaa', 'bbb', 'ccc']) // 只有两个参数,一个对象+一个数组
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/4572.html