关于this指向的三道题

//    this关键字是一个非常重要的语法点。 毫不夸张地说, 不理解它的含义, 大部分开发任务都无法完成。

        //    前一章已经提到, this可以用在构造函数之中, 表示实例对象。 除此之外, this还可以用在别的场合。 但不管是什么场合, this都有一个共同点: 它总是返回一个对象。

        //    简单说, this就是属性或方法“ 当前” 所在的对象。
        //第一题
        var name = "2222";
        var a = {
            name: "111",
            show: function() {
                console.log(this.name) //此时this在show方法中使用此时的this指向就是对象a
            }
        }
        var fun = a.show; //此时将this的指向改变为fun对象
        a.show(); //此时的this指向是a所以输出就是a中的name
        fun(); //由于this指向的改变此时输出就是全局变量
        var b = {
            name: "333",
            show: function(func) { //这里进行了传参操作,
                func();
            }
        }
        b.show(a.show); //此时将this指向改变为b,虽然是在b内,
        // //但是func在执行的时候并没有绑定在某个对象上,相当于是全局状况下调用,所以打印 ”222“
        b.show = a.show; //这里将a对象绑定给bthis指向随之改变巍峨b中的name
        b.show(); //输出值为333
        //第二题
        var a = "123"; //全局变量a
        function text() { //定义一个函数
            var a = "456"; //定义一个内部变量a
            this.a = "789"; //此时的This指向就是text 声明函数的作用域中,但是由var 声明的变量优先级比this的大
            console.log(a); //所以输出的就是内部变量a
        }
        text();
        var a = 123; //全局变量a
        function text() { //声明一个函数
            this.a = 234; //此时的This在text中声明指向就是text,此时内部的a是234
            console.log(a); //输出一下a
        }
        text(); //调用函数输出内部的值,并没有访问全局变量

        var a = 123; //全局变量
        function text() {
            this.a = 456; //此时的This指向就是text
            console.log(a) //输出a
        }
        new text(); //new 的作用方式1.自己创建一个空对象2.把This改变到空对象上,把所有属性挂载给空对象,
        //在return回来值赋值给空对象。 此时由于将this的指向改变到了window所以输出就是全局变量。
        //第三题
        var length = 10; //全局变量a
        function fn() {
            console.log(this.length) //此时This出现在fn对象中
        }
        fn(); // 此时的this指向就是对象fn但是函数内部并没有值 所以找到的是window中的全局变量
        let Person = {
            len: 5,
            say: function() {
                fn(); // 此时调用fn由于是var声明的函数任意位置都可以调用,此时的This指向没有改变所以输出还是10
                arguments[0](); //这里输出的是 arguments.length=1;
            }
        }
        Person.say(fn); //此时的this指向由fn改变为say,调用是输出的是arguments.length=1;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值