zoukankan      html  css  js  c++  java
  • 【转】JavaScript里的this指针

     用自然语言的角度理解JavaScript中的this关键字

    <script type="text/javascript">
        function ftn03(){
            var ftn04 = function(){//在javascript语言里任何匿名函数都是属于window对象
                console.log(this);// window , "函数里的this指向window"
            };
            ftn04();
        }
        ftn03();
    /*其实在javascript语言里任何匿名函数都是属于window对象,它们也都是在全局作用域构造时候完成定义和赋值,但是匿名函数是没有名字的函数变量,但是在定义匿名函数时候它会返回自己的内存地址,如果此时有个变量接收了这个内存地址,那么匿名函数就能在程序里被使用了,因为匿名函数也是在全局执行环境构造时候定义和赋值,所以匿名函数的this指向也是window对象,所以上面代码执行时候ftn04的this也是指向window,因为javascript变量名称不管在那个作用域有效,堆区的存储的函数都是在全局执行环境时候就被固定下来了,变量的名字只是一个指代而已。*/
    </script>

    情形一:传入的参数是函数的别名,那么函数的this就是指向window

    情形二:传入的参数是被new过的构造函数,那么this就是指向实例化的对象本身;

    情形三:如果我们想把被传入的函数对象里this的指针指向外部字面量定义的对象,那么我们就是用apply和call

    我们可以通过代码看出我的结论,代码如下:

    <script type="text/javascript">
    var name = "I am window";
    var obj = {
        name:"sharpxiajun",
        job:"Software",
        ftn01:function(obj){
            obj.show();
        },
        ftn02:function(ftn){
            ftn();
        },
        ftn03:function(ftn){
            ftn.call(this);//Call和apply是将this指针指向方法的第一个参数,ftn 对象代替 this 对象(this 继承 ftn
        }
    };
    function Person(name){
        this.name = name;
        this.show = function(){
            console.log("姓名:" + this.name);
            console.log(this);
        }
    }
    var p = new Person("Person");
    obj.ftn01(p);
    obj.ftn02(function(){
       console.log(this.name);
       console.log(this);
    });
    obj.ftn03(function(){
        console.log(this.name);
        console.log(this);
    });
    </script>

    结果如下:

     

    最后再总结一下:

    this都是指向实例化对象,如果在javascript语言里没有通过new(包括对象字面量定义)、call和apply改变函数的this指针,函数的this指针都是指向window

    引用:<http://www.cnblogs.com/sharpxiajun/p/4148932.html>

  • 相关阅读:
    socket
    RBAC
    CMOS和BIOS
    canvas和SVG
    兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面
    HTML标签marquee实现滚动效果
    百度判断手机终端并自动跳转uaredirect.js代码及使用实例
    JavaScript中常用的事件
    解决windows server 2008 r2 登录进入桌面只显示一片蓝色背景
    ng2自定义管道
  • 原文地址:https://www.cnblogs.com/blog-leo/p/4149212.html
Copyright © 2011-2022 走看看