您的位置:首页 > 移动开发

js中改变this指向的三种方法(bind、call、apply)

2020-04-22 04:21 851 查看
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']) // 只有两个参数,一个对象+一个数组
  • 点赞
  • 收藏
  • 分享
  • 文章举报
无心木偶xx 发布了7 篇原创文章 · 获赞 1 · 访问量 251 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: