zoukankan      html  css  js  c++  java
  • javascript中的'this'

    最近工作和看书时遇到了很多js中'this',觉得有必要梳理一下。

    1.在全局作用域中使用时,this就指向全局对象window。

    var name='aaa';
    alert(this.name);       //aaa
    alert(window.name);     //aaa
    alert(this===window);   //true

    2.当在全局作用域中定义一个函数,在函数中使用this,此时函数执行的环境对象是全局对象window,所以this也指向window。

    var name='aaa';
    function sayName(){
        alert(this.name);       //aaa
        alert(window.name);     //aaa
        alert(this===window);   //true
    }
    sayName();

    3.当然也可以通过函数的apply或call方法将函数中的this指向其他的作用域(环境对象)。

    var obj={name:'bbb'}
    var name='aaa';
    function sayName(){
         alert(this.name);       //bbb
         alert(this===window);   //false
         alert(this===obj);      //true
     }
    sayName.apply(obj);

    当改变了sayName的作用域时,this对象也跟着指向了sayName的作用域obj,所以此时this指向obj。

    4.当函数作为构造函数使用时,在构造函数中使用this,则this指向的是通过构造函数创建出来的新的对象。

    function Student(name){
        this.name=name;
    }
    var stu1=new Student('abc');
    alert(stu1.name);
    //abc

    使用构造函数创建对象时,首先会创建一个新的对象,然后会将构造函数的作用域赋给新对象,因此this就指向了新的对象。

    5.当函数作为一个对象的方法时,在函数中使用this,此时this指向了这个对象。

    var Student={
        name:'abc',
        sayName:function(){
            alert(this.name);       //abc
            alert(this===Student);  //true
        }
    }
    Student.sayName();

    6.当在对象的方法中调用嵌套方法时,this指向全局对象(非严格模式)或undefined(严格模式)

    var o={
            fun:function(){
                console.log(this===o);          //true
                f();
                function f(){
                    console.log(this===o);      //false
                    console.log(this===window); //true
                }
            }
        }

    嵌套的函数不会从调用它的函数中继承this.  

    总结:this引用的是函数据已执行的环境对象。

  • 相关阅读:
    汉语-谚语:条条大路通罗马
    汉语-词语:缱绻
    几何-对称图形:中心对称图形
    java解析获取Excel中的数据--同时兼容2003及2007
    如何使gcc输出搜索到的头文件路径?
    如何使tmux可以像vi一样操作(如快速跳转到某一行)?
    如何使tmux能够使用鼠标上下滚动?
    ID3v2: 为aac格式的音频文件添加ID3v2 Header
    FFmpeg: 利用FFmpeg提取音频文件中的metadata
    C语言:变长结构体
  • 原文地址:https://www.cnblogs.com/Tzhibin/p/4322202.html
Copyright © 2011-2022 走看看