<tfoot id='53C3Z'></tfoot>
    <bdo id='53C3Z'></bdo><ul id='53C3Z'></ul>

<small id='53C3Z'></small><noframes id='53C3Z'>

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

      1. <legend id='53C3Z'><style id='53C3Z'><dir id='53C3Z'><q id='53C3Z'></q></dir></style></legend>

        详解JS中的this、apply、call、bind(经典面试题)

        在Javascript中,this、apply、call、bind都是常见的关键字。它们在面试过程中也往往是必问的问题,因为它们对于Javascript的理解非常关键,而且使用得好能够使代码更加简洁高效。本文将会详细讲解它们的含义和用法。
        <legend id='p7QXK'><style id='p7QXK'><dir id='p7QXK'><q id='p7QXK'></q></dir></style></legend>
        • <bdo id='p7QXK'></bdo><ul id='p7QXK'></ul>
          <i id='p7QXK'><tr id='p7QXK'><dt id='p7QXK'><q id='p7QXK'><span id='p7QXK'><b id='p7QXK'><form id='p7QXK'><ins id='p7QXK'></ins><ul id='p7QXK'></ul><sub id='p7QXK'></sub></form><legend id='p7QXK'></legend><bdo id='p7QXK'><pre id='p7QXK'><center id='p7QXK'></center></pre></bdo></b><th id='p7QXK'></th></span></q></dt></tr></i><div id='p7QXK'><tfoot id='p7QXK'></tfoot><dl id='p7QXK'><fieldset id='p7QXK'></fieldset></dl></div>

              <tbody id='p7QXK'></tbody>
            <tfoot id='p7QXK'></tfoot>
            1. <small id='p7QXK'></small><noframes id='p7QXK'>

                  详解JS中的this、apply、call、bind(经典面试题)

                  在Javascript中,this、apply、call、bind都是常见的关键字。它们在面试过程中也往往是必问的问题,因为它们对于Javascript的理解非常关键,而且使用得好能够使代码更加简洁高效。本文将会详细讲解它们的含义和用法。

                  this

                  this是Javascript中非常重要的一个关键字,它表示函数的当前执行环境。this的指向可能是动态的,取决于函数的运行上下文。具体来说,this指向的是函数调用的主体。在全局作用域中,this指向的是window对象;而在函数内部,this的指向则根据情况而定。在函数中使用this,通常有以下几种情况:

                  1. 直接调用函数,this指向的是全局对象window。
                  function foo() {
                    console.log(this);
                  }
                  foo(); // window
                  
                  1. 函数作为对象的方法调用,this指向的是调用该函数的对象。
                  var obj = {
                    name: 'object',
                    foo: function () {
                      console.log(this);
                    }
                  };
                  obj.foo(); // obj
                  
                  1. 使用apply、call、bind等函数调用,this指向传入的第一个参数。
                  function foo() {
                    console.log(this);
                  }
                  foo.call(obj); // obj
                  

                  apply和call

                  apply和call都是Javascript中的方法,它们的作用是改变函数中this的指向。两者的区别在于参数传递的方式不同。其中,call的传参方式是单个参数列表,而apply接受一个数组作为参数。

                  function foo(a, b) {
                    console.log(a + b);
                    console.log(this);
                  }
                  
                  foo.apply(obj, [1, 2]); // 3,obj
                  foo.call(obj, 1, 2); // 3,obj
                  

                  bind

                  bind方法用于永久改变函数的this指向。它会返回一个新的函数,原函数并没有执行。bind也接受参数列表,这些参数将会被绑定在新函数的参数中。

                  function foo() {
                    console.log(this);
                  }
                  
                  var newFunc = foo.bind(obj);
                  newFunc(); // obj
                  

                  示例说明

                  示例一

                  下面这段代码展示了如何使用bind来永久改变函数的this指向。

                  var person = {
                      name: 'Jack',
                      age: 20,
                      sayHello: function(){
                          console.log('Hello, my name is ' + this.name + ', I am ' + this.age + ' years old.');
                      }
                  };
                  
                  var person2 = {
                      name: 'Tom',
                      age: 25
                  };
                  
                  var sayHello = person.sayHello.bind(person2);
                  sayHello(); // Hello, my name is Tom, I am 25 years old.
                  

                  可以看到,使用bind绑定person2作为sayHello函数的this值,最终执行结果中输出的name和age分别是person2的属性值。

                  示例二

                  下面这段代码展示了使用apply和call方法来改变this指向。

                  function add(a, b) {
                      console.log(this.x + a + b);
                  }
                  
                  var obj = {x: 5};
                  
                  add.apply(obj, [3, 4]); // 12
                  add.call(obj, 3, 4); // 12
                  

                  通过call和apply方法来调用add函数,可以将obj作为这个函数运行时的this值,从而通过this来访问obj的属性x。最终输出的结果应该是12。

                  总结:本文详细讲解了Javascript中的this、apply、call、bind这几个常用关键字的含义和用法。this用于表示函数调用的主体,而apply、call、bind用于改变函数中this的指向,并且也可以将一些参数绑定到函数中。在实际开发中,熟练掌握这些技巧可以让我们的代码更加简洁优雅。

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

                  相关文档推荐

                  layui实现图片上传成功后回显点击放大图片功能,html代码部分: !-- html代码--div class="layui-form-item" label class="layui-form-label"上传图片/label div class="layui-input-block" button type="button" class="layui-btn" id="license-auth-letter-
                  Layui实现数据表格中鼠标悬停图片放大离开时恢复原图的效果,最终效果如下图所示: 实现代码如下,在done函数中调用hoverOpenImg方法 var tableIns = window.demoTable = table .render({ elem : '#idTest', id : 'idTest', url : '/postData', //width : 150
                  我们在用到layui时候,需要点击文本输入框调起弹出选择框并选择内容,这个要怎么操作呢?以下两种方法可以参考: 1、点击名称,弹出信息弹框,选择表格中的某一行,实现效果如下: html页面代码 !--计量器具弹出层-- div id="equipment" lay-filter="equipmen
                  https的网站如果引用百度地图,会出现加载不了的问题,这是因为涉及到跨域问题,网站是https的,但是引用百度地图的是http的,这个要怎么操作呢? 比如我引用的地址:http://api.map.baidu.com/api?v=2.0ak=AK显示 后来看了一下,少了一个s=1字段,加一下s=1
                  做小程序项目的时候,客户提了一个功能需求优化,就是长按文字需要复制全部内容,因为有的手机支持全选复制,有的手机不支持全选复制。 通过设置系统剪贴板的内容和获取系统剪贴板的内容实现复制功能 html相关代码: van-field value="{{form.contactPhone}}"
                  由于项目功能需要,要实现对table中的行实现拖拽排序功能,找来找去发现Sortable.js能很好的满足这个需求,而且它还是开源的,于是乎就开始学习使用Sortable.js 特点 轻量级但功能强大 移动列表项时有动画 支持触屏设备和大多数浏览器(IE9及以下除外) 支持
                    <tbody id='nsOlg'></tbody>
                1. <tfoot id='nsOlg'></tfoot>

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

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