原生js: .call()
jQuery : .proxy()
利用赋值 var that = this; 来改变嵌套函数的 'this' 指向
利用 es6 箭头函数 改变 this指向
1 <script> 2 function show() { 3 alert(this) 4 } 5 // show() //-> window 6 // show.call(document) // ->document | 原生的方法 7 $.proxy(show, document)() // ->document | jQuery方法 8 </script>
tips: 对于一个传参的函数如上例中的 show(c1,c2),使用.proxy()也有几个场景,按需求进行传参,如:
1. .proxy( show, document, c1, c2 ) // --> 加()后,才进行调用
2. .proxy( show, document )( c1, c2 ) // --> 这就直接调用了
1 <script> 2 // 利用赋值 var that = this; 来改变嵌套函数的'this'指向 3 $('div').on('click', function() { 4 var that = this 5 setTimeout(function() { 6 console.log(that) // -> div 7 }) 8 }) 9 </script>
1 <script> 2 // 利用es6 箭头函数 改变 this指向 3 $('div').on('click', function() { 4 setTimeout(() => { 5 console.log(this) // -> div 6 }) 7 }) 8 </script>