zoukankan      html  css  js  c++  java
  • js中的this关键字

    面向对象语言中this表示当前对象的一个引用

    1.在方法中,this表示该方法所属的对象
    2.在函数中,函数的所属者默认绑定到this下;在严格模式下,this是未定义的(undefined)
    3.在事件中,this表示接收事件的元素
    4.如果单独使用,this表示全局对象
    5.对象方法中绑定,this是定义的对象,是函数的所有者
    5.call()和apply()方法可以将this引用到任何对象,改变this的指向

    单独使用this

    在浏览器中,window就是该全局对象

    this永远指向的是最后调用它的对象,也就是看它执行的时候是谁调用的,例子4中虽然函数fn是被对象b所引用,但是在将fn赋值给变量j的时候并没有执行所以最终指向的是

    var o = {
        a:10,
        b:{
            // a:12,
            fn:function(){
                console.log(this.a); //undefined
            }
        }
    }
    o.b.fn();
    var o = {
        a:10,
        b:{
            a:12,
            fn:function(){
                console.log(this.a); //undefined
                console.log(this); //window
            }
        }
    }
    var j = o.b.fn;
    j();

    new操作符会改变函数this的指向问题

    new关键字会创建一个空的对象,然后会自动经过一些操作(例如调用一个函数apply方法),将this指向这个空对象,这样的话函数内部的this就会被这个空的对象替代。

    function fn(){
        this.num = 1;
    }
    var a = new fn();
    console.log(a.num); //1

     下方例子函数体内部使用了this关键字。很多教科书会告诉你,this指的是函数运行时所在的环境。对于obj.foo()来说,foo运行在obj环境,所以this指向obj;对于foo()来说,foo运行在全局环境,所以this指向全局环境

    var obj = {
      foo: function () { console.log(this.bar) },
      bar: 1
    };
    
    var foo = obj.foo;
    var bar = 2;
    
    obj.foo() // 1
    foo() // 2

    参考:http://www.ruanyifeng.com/blog/2018/06/javascript-this.html

  • 相关阅读:
    LNMP架构三
    LNMP架构二
    LNMP架构
    LAMP架构三
    LAMP架构二
    LAMP架构
    rsync工具介绍
    mysqldump备份单表数据
    阿铭每日一题 day 14 20180125
    阿铭每日一题 day 13 20180124
  • 原文地址:https://www.cnblogs.com/wcx-20151115-hzz/p/14980933.html
Copyright © 2011-2022 走看看