
生下来,活下去,如此简单如此难!人,一辈子都在忙着,累着,奔波着,不论多苦,事,还是没做完。人,一辈子都在省着,攒着,储蓄着,不论多抠,钱,还是没存够。
一、默认模式和严格模式下:
⑴如果在默认模式下: 函数的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二、使用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了三、使用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了,后面的参数时用数组封装起来的四、使用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,....)