zoukankan      html  css  js  c++  java
  • JavaScript中的this详解

    前言

    this用法说难不难,有时候函数调用时,往往会搞不清楚this指向谁?那么,关于this的用法,你知道多少呢?

    下面我来给大家整理一下关于this的详细分析,希望对大家有所帮助!

    this指向的规律

    this指向的规律往往与函数调用的方式息息相关;this指向的情况,取决于函数调用的方法有哪些。

    我们来看一下姜浩五大定律:

    姜浩五大定律:

    ①通过函数名()直接调用:this指向window;
    ②通过对象.函数名()调用的:this指向这个对象;
    ③函数作为数组的一个元素,通过数组下标调用的:this指向这个数组;
    ④函数作为window内置函数的回调函数调用:this指向window,setTimeout,setInterval等……;
    ⑤函数作为构造函数,用new关键字调用时:this指向新new出的对象。

    对于this指向谁,我们记住一句就行:谁最终调用函数,this就指向谁!

    因为,

    ①this指向的永远只可能是对象!
    ②this指向谁,永远不取决于this写在哪!而是取决于函数在哪调用!!!
    ③this指向的对象,我们称之为函数的上下文context,也叫函数的调用者。

    多说无益,理论不如实践,大家一起来看下面的代码:

    HTML代码: 

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="UTF-8">
     5         <title>JavaScript中的this详解</title>
     6     </head>
     7     
     8     <body>        
     9         <div id="div">1111</div>        
    10     </body>
    11 </html>

    JS代码:

     1 function func(){
     2             console.log(this);
     3         }
     4         
     5         //①通过函数名()直接调用:this指向window
     6         func();
     7         
     8         //②通过对象.函数名()调用的:this指向这个对象
     9         //狭义对象
    10         var obj = {
    11             name:"obj",
    12             func1:func
    13         };
    14         
    15         obj.func1();//this--->obj
    16         
    17         //广义对象
    18         document.getElementById("div").onclick = function(){
    19             this.style.backgroundColor = "red";
    20         };//this--->div
    21         
    22         //③函数作为数组的一个元素,通过数组下标调用的:this指向这个数组
    23         var arr = [func,1,2,3];
    24         arr[0](); //this--->数组arr
    25         
    26         //④函数作为window内置函数的回调函数调用:this指向window
    27         setTimeout(func,1000);
    28         //setInterval(func,1000);
    29         
    30         //⑤函数作为构造函数,用new关键字调用时:this指向新new出的对象
    31         var obj = new func();//this--->new出的新obj

    看过代码之后,对于this的指向及用法,你了解透彻了么?

    下面我们来做个小练习巩固一下this指向的五大定律。

    看代码↓↓↓:

    HTML代码:

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="UTF-8">
     5         <title>JavaScript中的this详解</title>
     6     </head>
     7     
     8     <body>        
     9         <div id="div">1111</div>        
    10     </body>
    11 </html>

     

    JS代码:

     1 var obj1 = {
     2             name:'obj1',
     3             arr:[setTimeout(func,3000),1,2,3]
     4         }
     5         document.getElementById("div").onclick = obj1.arr[0];
     6         //函数最终调用者:setTimeout,符合规律⑤  this--->window
     7         
     8         
     9         var obj2 = {
    10             name:'obj1',
    11             arr:[func,1,2,3]
    12         }
    13         document.getElementById("div").onclick = obj2.arr[0]();
    14         //函数最终调用者:数组下标,符合规律③  this--->arr
    15         
    16         
    17         var obj3 = {
    18             name:'obj1',
    19             arr:[{name:'arrObj',fun:func},1,2,3]
    20         }
    21         document.getElementById("div").onclick = obj3.arr[0].fun();
    22         //函数最终调用者:{name:'arrObj',fun:func},符合规律②  this--->obj

    this的用法,你掌握了么?

    今天的内容就先分享到这里,如有问题,欢迎留言评论,大家一起交流,一起进步!

    ..。..。..。..。..。..。..。..。..。END..。..。..。..。..。..。..。..。..。

    ..。..。..。..。..。..。希望可以帮到你哟..。..。..。..。..。..。


    作者:夕照希望
    出处:http://www.cnblogs.com/hope666/  
    今日事,今日毕!我爱敲代码,代码使我快乐~
  • 相关阅读:
    iOS开发UI中懒加载的使用方法
    ios archives 出现的是other items而不是iOS Apps的解决方案
    Unable to find a team with the given Team ID或者Failed to code sign的问题解决
    Xcode升级插件失效解决办法-升级版
    iOS 全局禁止横屏,但UIWebView 全屏播放视频,横屏,解决办法
    【iOS进阶】UIWebview加载搜狐视频,自动跳回客户端 问题解决
    Swift学习笔记
    微信分享无响应的解决
    xcode6-添加真机设备
    【iOS系列】-UIWebView加载网页禁止左右滑动
  • 原文地址:https://www.cnblogs.com/hope666/p/6886376.html
Copyright © 2011-2022 走看看