zoukankan      html  css  js  c++  java
  • js基础-this的指向

    this 是什么?
      JavaScript this 关键词指的是它所属的对象。

    它拥有不同的值,具体取决于它的使用位置:

    • 方法中,this 指的是拥有者对象。
    • 单独的情况下,this 指的是全局对象。
    • 函数中,this 指的是全局对象。
    • 函数中,严格模式下,this 是 undefined。
    • 事件中,this 指的是接收事件的元素。
    • call() apply()以及bind()这样的方法可以将 this 引用到任何对象。

    简言之:this的指向具有不确定性, this在执行时才能确认,定义时无法确认

    示例:

    • 作为构造函数执行 【指向当前对象】
    1     function Foo(name){
    2         this.name = name;
    3         console.log(this);
    4       }
    5       var f = new Foo('tml');//指向当前对象

    结果:

    • 作为对象属性执行  【指向当前对象】
    1       var obj = {
    2         name:'A',
    3         printA:function(){
    4           console.log(this) //指向当前对象
    5         }
    6       }
    7       obj.printA();  

    结果:

    • 作为普通函数执行  【指向window】
    1  function fn(){
    2      console.log(this) //Window
    3  }
    4  fn()

    结果:

    • 在call apply bind中执行 【指向指定的对象】
    1 function fn1(name,age){
    2     console.log(this);
    3 }
    4 fn1.call({x:100},'zhang','20');//this指向{x:100}
    5 fn1.apply({y:200},['tml','20']);//this指向{y:200}

      用bind改变this指向,且只能使用表达式创建方法来实现

    1 var fn2 = function(name,age){
    2     console.log(this);
    3 }.bind({z:200})  //this指向{z:200}
    • 在事件中执行 【指向当前元素】
    1     var o = document.getElementById('btn');
    2     o.addEventListener('click',function(){
    3         console.log(this);
    4     })

    结果:

    •  在严格模式下执行

    this将保持他进入执行环境时的值,如果 this 没有被执行环境(execution context)定义,那它将保持为 undefined。

    1 function f2(){
    2   "use strict"; // 这里是严格模式
    3   console.log(this);
    4 }
    5 f2(); //结果为undefined
  • 相关阅读:
    CodeForces
    Vs2012在Linux开发中的应用(6):改写Makefile项目的Build过程
    Mac 上VitrualBox安装CentOS6.5 调整root分区的大小
    iOS面试常见题
    C语言入门(2)——安装VS2013开发环境并编写第一个C语言程序
    大数据
    HDU 5188 背包
    Android 上的 制表符(tab) —— 一个奇妙的字符 (cocos2dx crash)
    mysql读写分离(主从复制)实现
    高仿webqq做的一个webos桌面效果和web聊天工具,桌面效果完好,功能强大
  • 原文地址:https://www.cnblogs.com/lingXie/p/11493723.html
Copyright © 2011-2022 走看看