200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > this指向 改变this指向

this指向 改变this指向

时间:2019-05-22 05:23:03

相关推荐

this指向 改变this指向

1:全局下的 this 指向window2:函数中的this 谁调用指向谁3:事件处理函数中 this 谁触发指向谁4:对象中this 默认指向当前对象5:箭头函数中无this 但是如果箭头函数中出现this如何解决

this指向小练习

function a(){var user = "你好";console.log(this.user); //undefinedconsole.log(this); //Window}a(); //此处相当于window.a()

这仅是我个人的理解

在这个代码中我们可以看出在代码的结尾是由window来调用的函数a,那么这个时候this指向window,this.user,全局中没有user,所以先定义了,但是没有赋值,所以打印出undefined

this指向练习二

var fun = {user:"码农",fn:function(){console.log(this.user); //码农}}fun.fn();

在这里我们可以看到,因为你调用这个fn是通过fun.fn()执行的,所以此时this指向fun对象,所以这个this.user就是相当于 fun.user,所以打印出’码农’

改变this指向

call() apply() bind()1:相同点:都是【函数对象】中属性 ,改变【函数中】this指向2:不同点 2.1 bind() 方法 返回【被改变this】的【函数】,手动执行函数(bind的返回值)2.5 call() apply() 无返回值 自动触发函数2.9 call() apply() 区别:apply有两个参数,call有n个参数

apply的第二个参数是数组 3:call和apply 除第一个参数以外,其他参数都是给【点左边函数】传的【实参】4:语法 method.apply() method.call() method.bind()()

改变this指向练习

call()方法

//这是在网上找的小例子var Person = {name: "zhangsan",age: 19}function aa(x, y) {console.log(x + "," + y);console.log(this);console.log(this.name);}aa(4, 5);//此时相当于是window.aa(4,5) 所以此时this指向window 空aa.call(Person, 4, 5);//此时用call来改变this指向 此时相当于Person.aa(4,5) 所以指向Person对象 zhangsan//call 和 apply的用法差不多 区别在于传递参数aa.apply(Person, [4, 5]); //相当于Person.aa(4,5) 所以指向Person对象 zhangsan

bind() 创建的是一个新的函数( 称为绑定函数), 与被调用函数有相同的函数体, 当目标函数被调用时this的值绑定到 bind() 的第一个参数上

var Person = {name: "zhangsan",age: 19}function aa(x, y) {console.log(x + "," + y);console.log(this);console.log(this.name);}aa.bind(Person, 4, 5);//只是更改了this指向,没有输出aa.bind(Person, 4, 5)(); //this指向Person--4,5 Person{}对象 zhangsan

区分this 使用时指向问题

第一步:看this在哪里

- 全局 this 指向window

- 函数中

第二步:区分在什么函数中?

- 箭头函数中 this是找上层作用域的this 【自己没有】

- 上层作用域为全局 ------> window

- 上层域为【function】函数----->按照下面的步骤走

- 事件处理函数 this指向 【触发事件的dom对象】

- 构造函数 this指向构造函数创建的对象

- 其他

第三步:看【函数后】是否有 bind() call() apply()

- 有 以上三个函数 参一是什么 this指向参一对象

- 无 ----> 使用【谁调用指向谁规则】

- 注意:this.xx = xxx 是重新赋值还是添加属性

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。