js基础知识之-----this指向


生下来,活下去,如此简单如此难!人,一生都在忙着,累着,奔波着,不论多苦,事,仍是没作完。人,一生都在省着,攒着,储蓄着,不论多抠,钱,仍是没存够。
数组


1、默认模式和严格模式下:bash

⑴若是在默认模式下: 函数的this指向是window

function fun(x, y) {
    console.log(this,x,y);
}
fun(10,20);// 此时打印的this是window  复制代码

⑵若是在严格模式下: 函数的指向是undefined

function fun1(x, y){
    "use strict"
    console.log(this, x, y);
}
fun1(39, 13); // 此时打印的this指向是undefined复制代码

2、使用call()
call(): 参数一是要传的须要改变的this指向,从参数二开始就是要传入的函数参数
注意:call函数是改变this指向,而且当即执行函数

var Obj = {
    name: "张三"
}
function fun2(x, y) {
    console.log(this, x, y);
}
fun2(20,30);// 若是这样直接调用的话,this指向就是window
fun2.call(Obj, 30, 50); //若是使用call改变其this指向的话, 这时候this就是指向Obj了复制代码

3、使用apply()
apply(): 参数一是要传入的须要改变this指向,后面要传入的是一个数组,数组里面是函数要传入的参数
注意:apply函数是改变this指向,而且当即执行函数

var Obj = {
    name: "张三"
}
function fun3(x, y) {
    console.log(this, x, y);
}
fun3(20,30);// 若是这样直接调用的话,this指向就是window
fun3.apply(Obj, [100,200]); //若是使用apply改变其this指向的话, 这时候this就是指向Obj了,后面的参数时用数组封装起来的复制代码

4、使用bind()
bind(): 参数一是须要传入的this指向,参数二开始日后都是函数的参数
注意: bind函数是改变this指向,可是不当即执行,是将原函数拷贝复制一份,而后返回一个全新函数,等须要的时候再调用

var Obj = {
    name: "张三"
}
function fun4(x, y) {
    console.log(this, x, y);
}
// 使用bind会复制一个函数,而后改变其this指向,并返回一个新的函数
var ss = fun4.bind(Obj);
// 这个时候再调用传入参数
ss(10, 20);复制代码

总结:

修改this而且当即执行:
①:函数.call(对象,arg1,arg2....)
②:函数.apply(对象,[arg1,arg2,...])
修改this不执行, 返回新函数地址之后执行
③:var ss=函数.bind(对象,arg1,arg2,....)

判断this指向时:永远记住这一点:判断 this 指向谁,看执行时而非定义时,只要函数(function)没有绑定在对象上调用,它的 this 就是 window。

相关文章
相关标签/搜索