• <tfoot id='jcn0b'></tfoot>

      <small id='jcn0b'></small><noframes id='jcn0b'>

      <legend id='jcn0b'><style id='jcn0b'><dir id='jcn0b'><q id='jcn0b'></q></dir></style></legend>
      <i id='jcn0b'><tr id='jcn0b'><dt id='jcn0b'><q id='jcn0b'><span id='jcn0b'><b id='jcn0b'><form id='jcn0b'><ins id='jcn0b'></ins><ul id='jcn0b'></ul><sub id='jcn0b'></sub></form><legend id='jcn0b'></legend><bdo id='jcn0b'><pre id='jcn0b'><center id='jcn0b'></center></pre></bdo></b><th id='jcn0b'></th></span></q></dt></tr></i><div id='jcn0b'><tfoot id='jcn0b'></tfoot><dl id='jcn0b'><fieldset id='jcn0b'></fieldset></dl></div>

          <bdo id='jcn0b'></bdo><ul id='jcn0b'></ul>

        JavaScript中的this指向问题详解

        在JavaScript中,每个函数都有自己的上下文环境,而this关键字就是指向这个上下文环境,表示当前函数的执行环境。
        • <bdo id='48NBm'></bdo><ul id='48NBm'></ul>

              <i id='48NBm'><tr id='48NBm'><dt id='48NBm'><q id='48NBm'><span id='48NBm'><b id='48NBm'><form id='48NBm'><ins id='48NBm'></ins><ul id='48NBm'></ul><sub id='48NBm'></sub></form><legend id='48NBm'></legend><bdo id='48NBm'><pre id='48NBm'><center id='48NBm'></center></pre></bdo></b><th id='48NBm'></th></span></q></dt></tr></i><div id='48NBm'><tfoot id='48NBm'></tfoot><dl id='48NBm'><fieldset id='48NBm'></fieldset></dl></div>
              <legend id='48NBm'><style id='48NBm'><dir id='48NBm'><q id='48NBm'></q></dir></style></legend>
            1. <tfoot id='48NBm'></tfoot>

                    <tbody id='48NBm'></tbody>

                  <small id='48NBm'></small><noframes id='48NBm'>

                1. JavaScript中的this指向问题详解

                  1. this的概念

                  在JavaScript中,每个函数都有自己的上下文环境,而this关键字就是指向这个上下文环境,表示当前函数的执行环境。

                  2. this的指向

                  • 全局环境下,this指向全局对象(浏览器中为window对象)。

                  • 函数内部,this指向调用该函数的对象,如果没有上下文对象,则为window对象。

                  • 构造函数中,this指向新创建的对象。

                  • apply()、call()与bind()方法中,this指向指定的对象。

                  • 箭头函数内部的this指向在定义时确定。

                  3. 函数内部的this

                  示例1:

                  let obj = {
                      name: '张三',
                      sayName: function(){
                          console.log(this.name);
                      }
                  }
                  obj.sayName();  // 输出:张三
                  

                  示例1中,对象obj调用了sayName方法,因此sayName内部的this指向的就是obj对象。

                  示例2:

                  function foo(){
                      console.log(this === window);
                  }
                  foo();  // 输出:true
                  

                  示例2中,foo函数在全局环境下执行,因此foo内部的this指向全局对象,即window对象。

                  4. 构造函数中的this

                  示例3:

                  function Person(name, age) {
                      this.name = name;
                      this.age = age;
                      this.sayName = function () {
                          console.log(this.name);
                      }
                  }
                  let p1 = new Person('张三', 18);
                  let p2 = new Person('李四', 19);
                  p1.sayName();  // 输出:张三
                  p2.sayName();  // 输出:李四
                  

                  示例3中,Person函数是一个构造函数,我们用new操作符创建了两个新对象p1和p2,这些新对象中的this指向了它们自己。

                  5. apply()、call()与bind()方法中的this

                  示例4:

                  let obj1 = { name: '张三' };
                  let obj2 = { name: '李四' };
                  
                  function sayName() {
                      console.log(this.name);
                  }
                  sayName.call(obj1);  // 输出:张三
                  sayName.call(obj2);  // 输出:李四
                  

                  示例4中,我们分别用call()方法将sayName函数的this指向obj1和obj2对象,输出了这两个对象的name属性。

                  6. 箭头函数中的this

                  示例5:

                  let obj1 = { name: '张三' };
                  let obj2 = { name: '李四' };
                  let sayName = () => {
                      console.log(this.name);
                  }
                  obj1.sayName = sayName;
                  obj2.sayName = sayName;
                  obj1.sayName();  // 输出:undefined
                  obj2.sayName();  // 输出:undefined
                  

                  示例5中,我们将箭头函数sayName分别赋值给对象obj1和obj2的sayName属性,并调用了这些属性,但是输出结果都为undefined,这是因为箭头函数内部的this指向在定义时就已经确定,即它没有自己的this值,而是继承了上层的作用域中的this值,也就是全局变量window,因此输出结果为undefined。

                  7. 总结

                  JavaScript中的this指向问题比较复杂,需要我们在具体的应用场景中灵活运用。最常用的情况就是函数内部的this,需要注意调用的上下文环境。在需要改变this指向的情况下,可以考虑使用apply()、call()与bind()方法。而对于箭头函数,this的指向在定义时就已经确定好了,需要特别注意。

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  treetable.js没有checked做联动。于是自己基于treetable开发的一个小功能,希望能和大家一起交流一下。 1. 在当前HTML文档checked监听函数中增加以下代码 //联动 table.on('checkbox(quan_list)', function(obj){ //console.log(obj); //当前id var id = obj.
                  当使用Javascript的attachEvent来绑定事件时,我们希望能够给事件处理函数传递一些参数,但是attachEvent本身并不支持传递参数。下面介绍两种解决方法。
                  KnockoutJS是一款流行的JavaScript库,针对一个web应用程序的建立提供了比较好的基础架构。其中,表单的数据绑定功能是KnockoutJS最为常用的功能之一。本文将详细讲解KnockoutJS 3.x
                  下面是用javascript实现改善用户体验之alert提示效果的完整攻略。
                  在学习JavaScript编写贪吃蛇游戏之前,需要掌握以下的前置知识:
                  <legend id='FpXzo'><style id='FpXzo'><dir id='FpXzo'><q id='FpXzo'></q></dir></style></legend>
                2. <i id='FpXzo'><tr id='FpXzo'><dt id='FpXzo'><q id='FpXzo'><span id='FpXzo'><b id='FpXzo'><form id='FpXzo'><ins id='FpXzo'></ins><ul id='FpXzo'></ul><sub id='FpXzo'></sub></form><legend id='FpXzo'></legend><bdo id='FpXzo'><pre id='FpXzo'><center id='FpXzo'></center></pre></bdo></b><th id='FpXzo'></th></span></q></dt></tr></i><div id='FpXzo'><tfoot id='FpXzo'></tfoot><dl id='FpXzo'><fieldset id='FpXzo'></fieldset></dl></div>
                3. <small id='FpXzo'></small><noframes id='FpXzo'>

                      • <tfoot id='FpXzo'></tfoot>

                          • <bdo id='FpXzo'></bdo><ul id='FpXzo'></ul>
                              <tbody id='FpXzo'></tbody>