作者:cdV陈海泰C | 来源:互联网 | 2023-09-25 18:42
this指向window声明式函数functionfun1(){console.log(this);}fun1();匿名函数constfun2function(){console
this指向 window 声明式函数 function fun1 ( ) { console. log ( this ) ; } fun1 ( ) ;
匿名函数 const fun2 = function ( ) { console. log ( this ) ; } fun2 ( ) ;
定时器 延时器 setInterval ( function ( ) { console. log ( this ) ; } , 1000 ) ; setTimeout ( function ( ) { console. log ( this ) ; } , 1000 ) ;
forEach循环 const arr = [ 1 , 2 , 3 , 4 , 5 ] ; arr. forEach ( function ( item ) { console. log ( this ) ; } )
this指向 事件源 事件绑定中 事件处理函数 this指向默认是事件源也就是绑定事件的标签对象
< div> 我是div标签对象 div>
const oDiv &#61; document. querySelector ( &#39;div&#39; ) ; oDiv. addEventListener ( &#39;click&#39; , function ( ) { console. log ( this ) ; } )
this指向 数组/对象 数组/对象中 存储的函数 this指向是 数组/对象
const arr1 &#61; [ 1 , 2 , 3 , function ( ) { console. log ( this ) } ] ; arr1[ 3 ] ( ) ;
const obj &#61; { name: &#39;张三&#39; , age: 18 , sex: &#39;男&#39; , fun : function ( ) { console. log ( this ) ; console. log ( this . name) ; console. log ( this . age) ; console. log ( this . sex) ; } , } ; obj. fun ( ) ;
箭头函数的this指向 箭头函数的this指向是 父级程序的this指向如果没有父级程序 或者 父级程序没有this &#xff0c;箭头函数的this指向是 window
oDiv. addEventListener ( &#39;click&#39; , ( ) &#61;> { console. log ( this ) ; } )
const obj &#61; { name: &#39;张三&#39; , age: 18 , sex: &#39;男&#39; , fun1 : function ( ) { console. log ( this ) } , fun2 : ( ) &#61;> { console. log ( this ) } , fun3 : function ( ) { const fun4 &#61; ( ) &#61;> { console. log ( this ) ; } fun4 ( ) ; } } ; obj. fun1 ( ) ; obj. fun2 ( ) ; obj. fun3 ( ) ;
改变this指向 call 函数调用.call( 参数1 , 参数2,参数3.... );参数1: 要改变的this指向之后的所有参数参数2,参数3....原始函数需要的数据
const obj1 &#61; { name: &#39;张三&#39; , age: 18 , sex: &#39;男&#39; , fun : function ( addr, phone ) { console. log ( this . name ) ; console. log ( this . age ) ; console. log ( this . sex ) ; console. log ( addr ) ; console. log ( phone ) ; } } obj1. fun ( &#39;北京&#39; , 12341 ) ;
const obj2 &#61; { name: &#39;李四&#39; , age: 20 , sex: &#39;女&#39; , } ; obj1. fun . call ( obj2 , &#39;天津&#39; , 12345 ) ;
apply 函数调用.apply( 参数1 , [ 参数2,参数3.... ] );参数1: 要改变的this指向之后的所有参数参数2,参数3....以数组的形式 赋值 原始函数需要的数据
const obj2 &#61; { name: &#39;李四&#39; , age: 20 , sex: &#39;女&#39; , } ; obj1. fun . apply ( obj2 , [ &#39;天津&#39; , 12345 ] ) ;
bind const obj1 &#61; { name: &#39;张三&#39; , age: 18 , sex: &#39;男&#39; , fun : function ( addr, phone ) { console. log ( this . name ) ; console. log ( this . age ) ; console. log ( this . sex ) ; console. log ( addr ) ; console. log ( phone ) ; } } const obj2 &#61; { name: &#39;李四&#39; , age: 20 , sex: &#39;女&#39; , } ; obj1. fun . bind ( obj2 , &#39;天津&#39; , 12345 ) ( ) ;
不同点&#xff1a; 函数调用 call&#xff0c;apply方法时&#xff0c;返回的是调用函数的返回值。 bind是返回一个新的函数&#xff0c;需要再加一个小括号来调用。 call和apply的区别就是&#xff0c;call接受的是一系列参数&#xff0c;而apply接受的是一个数组。 < div> 我是div标签 div> < p> 我是p标签 p> < h1> 我是h1标签 h1>
const oDiv &#61; document. querySelector ( &#39;div&#39; ) ; oDiv. addEventListener ( &#39;click&#39; , fun ) ; function fun ( ) { this . style. color &#61; &#39;red&#39; ; this . style. width &#61; &#39;200px&#39; ; this . style. height &#61; &#39;200px&#39; ; this . style. background &#61; &#39;pink&#39; ; }
const oP &#61; document. querySelector ( &#39;p&#39; ) ; const oH1 &#61; document. querySelector ( &#39;h1&#39; ) ; oDiv. addEventListener ( &#39;click&#39; , fun . bind ( oP , &#39;张三&#39; , 18 , &#39;男&#39; ) ) ; oDiv. addEventListener ( &#39;click&#39; , fun . bind ( oH1 , &#39;张三&#39; , 18 , &#39;男&#39; ) ) ; function fun ( name, age, sex ) { this . style. color &#61; &#39;red&#39; ; this . style. width &#61; &#39;200px&#39; ; this . style. height &#61; &#39;200px&#39; ; this . style. background &#61; &#39;pink&#39; ; console. log ( name , age , sex ) ; }