`

js中的this指向

阅读更多

      在工作过程当中,我们经常会碰到有关于this这个关键字,尤其是在封装插件的时候,如果对于this的指代不理解或者一知半解,就会导致我们项目中,后续出现各种各样的问题,下面就说说我自己对于this关键字的理解

       关于this的指向,我们始终记住一句话,那就是“this的指向,在函数定义的时候是确定不了的,只有在函数调用的时候,我们才能知道this指向”;如何理解这句话呢?如下所示:

        function  A(){

             var  name="hello";

              this.age=12;

              console.log(this.age);

         };

         A(); //12;

      在上面这个例子中,函数执行完后,会打印出12;因为此时定义的函数A是在window作用域下定义的,所以在执行A的时候,我们可以理解成此时是window调用了A函数,所以在非严格状态下,此时的this指向的是window;

       再来看一个例子:

        var name="haimei"

        var  object={

            name:"lilei",

            getName:function(){

                 console.log(this.name);

           }

        };

        object.getName();//lilei;

   上述这个例子中,函数getName()被object调用的,所以在执行函数的时候,会打印出"lilei";

    我们再来看一个例子:

     var name="haimei"

        var  object={

            name:"lilei",

            people:{

                 name:"tom",

                 getName:function(){

                       console.log(this.name);

                  }

            }

        };

        object.people.getName(); //   ?

        各位看官可以想想这个时候,打印出来的会是什么?

         在上面这个例子中,最终打印出来的会是tom;

         先简单总结一下:

              1:如果在一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window;

              2:如果一个函数中有this,这个函数被上级对象所调用,那么this指向的就是上级对象;

              3:如果一个函数中有this,这个函数是被多个对象所包裹的(即:这个函数的父级是一个对象,它的父级的父级也是一个对象,依次类推,即使这个函数被父级对象的父级对象........所包裹);在调用的时候,尽管这个函数是被最外层的对象所调用,函数中的this指向的也只是它的父级对象;

 

        二:当碰到的this在构造函数里面时的情况:

             function  Fn(){

                 this.name="瞎搞"

             };

             var  user=new  Fn();

              console.log(user.name);    //瞎搞

              这里之所以能够通过实例化的对象来调用name属性,这是因为new  关键字改变了this的指向;此时的this指向的是实例化出来的user对象;

        三:当有this的函数中有return 关键词的时;

            function  Fn(){

                  this.name="瞎搞";

                  return  {name:"瞎说"}

             };

            var   obj=new  Fn();

            console.log(obj.name);  //瞎说;

            function  Fn(){

                  this.name="瞎搞";

                  return  {}

             };

            var   obj=new  Fn();

            console.log(obj.name);  //undefined;

            function  Fn(){

                  this.name="瞎搞";

                  return 1;

             };

            var   obj=new  Fn();

            console.log(obj.name);  //瞎搞;

            function  Fn(){

                  this.name="瞎搞";

                  return null;

             };

            var   obj=new  Fn();

            console.log(obj.name);  //瞎搞;

       在上述三个例子中,不知道各位有没有看出来什么;

              从上述例子中,我们可以明显的知道,在一个有this的函数中,如果有return 关键字,且返回的是一个对象,那么this指向的就是返回的那个对象,也行有人会说最后一个例子中,返回的是一个null,在js里面,null也是对象,那为什么最后调用name属性的时候,也会输出“瞎搞”,这里麻烦大家记住,对于返回值为null的this也是指向通过函数实例化的那个对象;

             而如果返回的不是一个对象,而是一个非引用类型的,this指向的也是通过函数实例化出来的对象;             ,即.return的是五种简单数据类型:String,              Number,Boolean,Null,Undefined,这种情况下,忽视return值,依然返回this对象。

 

       如有错误的地方,欢迎各位指正

分享到:
评论

相关推荐

    Javascript 中 this指向

    这时,this指向的是最后调用它的对象,在foo.fn()语句中,this指向的是foo对象。 例题 4: ``` const student = { name: 'zhangsan', fn: function () { return this; } } console.log(student.fn() === ...

    JavaScript中this指向.docx

    ### JavaScript中this指向详解 #### 一、引言 在JavaScript编程中,`this`关键字的使用及其指向问题一直是困扰很多开发者的难点之一。不同于传统面向对象编程语言如Java或C#中的`this`概念,JavaScript中的`this`...

    复习JavaScript中this指向及绑定

    复习JavaScript中this指向及绑定

    JavaScript中this指向.pdf

    由于this在JavaScript中的运行期绑定特性,导致了this指向的复杂性。 在JavaScript中,this的指向可以有以下几种情况: 1. 指向window的隐式指向 在全局作用域中,如果函数没有明确的调用者,那么this通常指向全局...

    javascript中this指向详解

    为了让读者更加深入地理解JavaScript中的this指向问题,本文将会详细分析this在不同场景下的行为,并通过实际代码示例来说明。 首先,JavaScript中的this不同于一些其他面向对象编程语言(如Java或C#)中的this。在...

    关于js中this指向问题的一些学习经验分享.md

    文章中写的东西导出在一个Markdown文件中,想要的志同道合的朋友,童鞋可以下载浏览。欢迎有错误指出 谢谢!

    探寻JavaScript中this指针指向_.docx

    情况3:假如一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象。 这篇文章深入探讨了JavaScript中的this指针指向问题,并提供了多个例子来说明this...

    javascript中this的指向问题总结

    JavaScript中this的指向还没搞明白?来这看看 你就懂啦~

    JavaScript语言中this指向研究 (1).pdf

    - 在全局环境中,`this`默认指向`window`对象(在浏览器环境下),或者在Node.js中,`this`指向全局对象`global`。在下面的代码示例中,`this`可以用来访问全局变量: ```javascript var str = "hello JavaScript...

    js中this的指向问题

    全局作用域、普通函数以及定时器中的this指向全局对象window 方法中的this指向的是调用它的对象 构造函数中的this指向构造函数的实例 箭头函数中没有绑定this,this为最近外层作用域下有定义的this call、apply、...

    js中常见this指向问题.md

    在浏览器环境中,`this`通常指向全局对象`window`(在Node.js中则指向`global`对象)。 示例代码: ```javascript function fn() { console.log(this); // 输出:window } ``` ##### 2. 在构造函数中 当函数作为...

    JavaScript程序设计-javascript中this的指向问题.pdf

    在JavaScript编程中,`this`关键字是一个至关重要的概念,它表示...了解这些基本规则后,处理JavaScript中的`this`指向问题将变得更加容易。在编写代码时,正确理解和使用`this`是避免错误和提高代码可读性的重要步骤。

    javaScript中的this指向 (2).md

    js中的this指向的几种具体情况: 1.通过函数名直接调用,this指向window; 2.函数作为window内置函数的回调函数调用,this指向window; 3.通过对象调用函数,this指向这个对象; 4.函数作为构造函数,this指向新new...

    JavaScript中的this指向.md

    JavaScript中的this指向.md

    针对JavaScript中this指向的简单理解

    1. **默认指向**:在一个非严格模式的全局环境中,如果`this`未被任何对象引用,它将默认指向`window`对象(在浏览器环境)或`global`对象(在Node.js环境)。在严格模式下,`this`在全局作用域中将被设置为`...

    js this指向笔记.docx

    - 在全局作用域中,`this` 指向全局对象,在浏览器环境中是 `window`,在 Node.js 中是 `global`。 - 在函数调用中,如果函数不是一个方法(即没有被某个对象拥有),`this` 也会指向全局对象。 2. **隐式绑定**...

    彻底理解js中this的指向

    深度理解js中this的指向问题

    Javascript中this关键字指向问题的测试与详解

    在JavaScript中,当函数作为对象的一个方法被调用时,`this`会指向调用该方法的对象。例如: ```javascript var obj = { str: "wangwu", say: function() { alert(this.str); } }; obj.say(); // 输出 "wangwu...

    【JavaScript源代码】JavaScript中的this指向问题详解.docx

    JavaScript中的`this`指向问题是一个常见且重要的概念,对于理解和编写高效、无错误的JavaScript代码至关重要。`this`关键字在JavaScript中表示当前上下文的对象,它的指向不是固定的,而是根据函数调用方式的不同而...

Global site tag (gtag.js) - Google Analytics