1.更改this指向

  方法1:对this进行保存
               var _this = this;

       例: var _this = this;
             document.onclick = function(){
                  console.log(_this)
               }
             console.log(_this);

  方法2:bind   更改this指向。   返回的是一个函数体
           注意:  fn.bind(document)();   更改指向必须加()调用。

   例1:function fn(){
              console.log(this);
            }
        fn.bind(document)();

   例2:var obj = {
                show : function(){
                    console.log(this);
                }.bind(document)
            }

  方法3:call    更改this指向         fn.call(document);

      call(this指向,参数1,参数2,参数3,参数4)

      function fn1(a,b){
            return a + b;
          }
        function fn2(a,b){
              return a * b;
          }
        var res = fn2.apply(fn1,10,20);
         console.log(res);

  方法4:apply  更改this指向       fn.apply(document);

       apply(this指向,[值1,值2....])

  例1:
         function fn(){
           console.log(this);
            }
       fn.apply(document);

  例2:function fn1(a,b){
            return a + b;
          }
        function fn2(a,b){
              return a * b;
          }
        var res = fn2.apply(fn1,[10,20]);
         console.log(res);

总结:

更改this指向:
            bind     call    apply区别
        bind :     返回的是一个函数体,    用必须加()调用;
        call 和 apply的区别:
            所接收的参数不同
            call(this指向,参数1,参数2,参数3,参数4)
            apply(this指向,[值1,值2....])
 

2.call和apply回顾

  例1:function yasuo(name){

    this.name=name;

    this.skill=function(name){

      console.log(name+'正在使用钢铁斩');

      }

    }

  var have =new yasuo;

    hove.skill('亚索');                            //亚索正在使用钢铁斩

  例2:

 function Yasuo(name){
         this.name = name;
         this.skill=function(){
          console.log(this.name+'正在使用轻钢斩');
         }
   }
 function zhaoxin(name){
    this.name=name;
    Yasuo.call(this,name);
   }
   var hove=new zhaoxin('赵信');
    console.log( hove.skill);   //赵信正在使用钢铁斩

例3:

  function Yasuo(name){
           this.name = name;
      }
       Yasuo.prototype.skill = function(){}
       function Zhaoxin(name){
          this.name = name;
          Yasuo.apply(this)
     }
      var hore = new Zhaoxin();
       
       hore.skill('赵信');            //出错,
例4:

  function Person(name,age,id){
          this.name = name;
          this.age = age;
          this.id = id;
      }
      Person.prototype = {
          eat: function(){},
          sleep : function(){}
      }
      function Man(name,age,id,houjie){
          Person.call(this,name,age,id) 
          this.houjie = houjie;
          this.work = function(){
              console.log('男人的工作')
          }
      }
      var wangshuai = new Man('ws','20','111111','true');
      console.log(wangshuai);     
            //   Man:
               age: "20"       houjie: "true"    id: "111111"          name: "ws"       work: ƒ ()         __proto__: Object
 

总结: call和apply 都可完成参数传递,

   call和apply 常用来继承属性,无法继承prototype内的方法

 

js中更改this指向 以及回顾bind、call和apply的更多相关文章

  1. js中修改this指向的方法(call,apply,bind)

    前言:call.apply和bind都是为了改变某个函数运行时的this指向的,对于前端人员来说,关于this的掌握程度,直接决定了前端水平的高低.下面我们就来简单浅显易懂的来看一下es5中常用的三种 ...

  2. js中改变this指向的call、apply、bind 方法使用

    前言: 由于js 中this的指向受函数运行环境的影响,指向经常改变,使得开发变得困难和模糊,所以在封装sdk,写一些复杂函数的时候经常会用到this 指向绑定,以避免出现不必要的问题,call.ap ...

  3. js中this的指向

    在js中this的指向对于新手来说一定是个难题,但是如果你真正理解了的话,也就没什么问题啦,下面就来讲讲this吧. JS中,this的值取决于调用的模式(调用对象),而JS中共有4种调用模式: 1. ...

  4. JS中的this 指向问题

    我发现在对JS的学习中有很多朋友对this的指向问题还是有很大的误区或者说只是大致了解,但是一旦遇到复杂的情况就会因为this指向问题而引发各种bug. 对于之前学习过c或者是Java的朋友来说可能这 ...

  5. 理解js中this的指向

         学习自原文  http://www.cnblogs.com/pssp/p/5216085.html后的一点小结(原文作者总结的很棒^_^)! 关于js中this的指向,在函数定义的时候还无法 ...

  6. 轻松了解JS中this的指向

    JS中的this指向一直是个让人头疼的问题,想当初我学的是天昏地暗,查了好多资料,看的头都大了,跟他大战了那么多回合,终于把它搞定个七八分,其实往往都是我们复杂化了,现在就让大家轻松看懂this的指向 ...

  7. js中 this 的指向

    js中 this的指向一共存在3种地方: 1.全局的this; 2.构造函数的this; 3.call/apply; 一.全局的this: function test(){ this.d = 3;// ...

  8. JS 中的this指向问题和call、apply、bind的区别

    this的指向问题 一般情况下this对象指向调用函数的对象,全局环境中执行函数this对象指向window. function a(){ console.log(this); //输出函数a中的th ...

  9. 彻底理解js中this的指向,不必硬背。

    首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然 ...

随机推荐

  1. 关于Calendar的一些用法总结

    import java.util.Calendar; import java.security.KeyStore.TrustedCertificateEntry; import java.text.D ...

  2. Socket 连接问题之大量 TIME_WAIT

    简评:最近项目就出现了大量短连接导致建立新连接超时问题,最后是通过维护长连接解决的. 代理或者服务器设备都有端口限制,如果使用 TCP 连接,连接数量达到端口限制,在这种情况下,将不能创建新的连接. ...

  3. 用框架名唬人谁都会,那你知道Web开发模式吗?——莫问前程莫装逼

    前言:这两天总结了一些Servlet和JSP里面的知识,写了几篇博客,果然有种“温故而知新”的感觉,学完这些,继续前行,开始整合框架里的知识,框架虽好,可底层原理该掌握的也得掌握,防止以后做项目的时候 ...

  4. linux初学者-swap分区篇

    linux初学者-swap分区篇 swap是虚拟内存,是在硬盘中分区一块区域,当内存占满但是又急迫需要时临时当作内存使用,使用效率低于内存.本文将对linux系统中swap分区的建立做一个简要介绍. ...

  5. DH、RSA与ElGamal非对称加密算法实现及应用

    1.对称加密与非对称加密概述 关于对称加密与非对称加密的概念这里不再多说,感兴趣可以看下我之前的几篇文章,下面说一说两者的主要区别. 对称加密算法数据安全,密钥管理复杂,密钥传递过程复杂,存在密钥泄露 ...

  6. [机器学习] SVM——Hinge与Kernel

    Support Vector Machine [学习.内化]--讲出来才是真的听懂了,分享在这里也给后面的小伙伴点帮助. learn from: https://www.youtube.com/wat ...

  7. 基于SpringBoot从零构建博客网站 - 新增创建、修改、删除专栏功能

    守望博客是支持创建专栏的功能,即可以将一系列相关的文章归档到专栏中,方便用户管理和查阅文章.这里主要讲解专栏的创建.修改和删除功能,至于专栏还涉及其它的功能,例如关注专栏等后续会穿插着介绍. 1.创建 ...

  8. jplayer

    简介 jplayer是个用JavaScript写的完全免费和开源的媒体库(media library).作为jQuery插件的一员,使用jPlayer可以在你的网页上轻松加入跨平台的音乐和视频 使用方 ...

  9. maven项目引用错误 和项目结构问题

    解决办法: 鼠标右键   maven ---->update prroject Configuration 然后 maven clean  maven install

  10. Fork 多进程 模拟并行访问web service获取响应时间差

    #include <ros/ros.h> #include <iostream> #include <string> #include <cstring> ...