this指向的问题,和new函数的原理

  1. 普通function在没有被更改this指向的情况下默认内部this是指向window的
  2. 箭头函数没有特定的this指向,他的this指向的是上一级作用域的this
  3. 函数被谁调用他的this指向就指向谁
/*
new 函数的过程做了哪些事情?
function Person(){};
1. const obj = { } ;
实例对象想要访问原型对象我们要用__proto__,      实例对象.__proto__
原函数想要访问原型对象上的方法我们用prototype   Person.prototype
2. obj._proto_ = Person.prototype;
3. Person.call(obj);让函数立即执行

new的过程是先声明一个obj对象,然后把原函数的原型对象赋值给obj对象的原型
然后在把原函数的this指向进行修改并且指向我们的obj对象
*/

function moren() {
console.log(“默认情况下的this是指向windows的”, this);
}
如下在全局下打印定时器的this,因为箭头函数的父级作用域是全局,全局的this是window所以箭头函数内部的this也是指向window
setTimeout(() => {
console.log(“箭头函数在windows下调用的时候”, this);
}, 0)

var obj = {
        a: 1,
        b: 2,
        zy: function zy() {
            console.log("打印的是被obj调用的this咯", this)
        },
        jiantou: function jiantou() {
            setTimeout(() => {
                console.log("箭头函数被一般函数包裹是箭头函数内部的this就是父函数的this", this);
            }, 0)
        },
        objFunction: function objFunction() {
            var self = this

            function windows() {
                console.log("windows函数内部的this指向的是windows", this);
                console.log("如果我们想拿到obj对象当中的a则可以用self去拿而不能直接用this", self.a);
            }
            windows()
        }
    }
obj.zy() //因为是被对象obj调用所以函数内部的this是obj
obj.jiantou()//因为jiantou这个普通函数被obj调用所以jiantou这个普通函数的this是obj,但是定时器箭头函数的this是父级作用域的this索引定时器内部的this打印的是obj
obj.objFunction()//我们是用obj去调用的objFunction普通函数所以objFunction内部的this也就是self是obj,但是windows普通函数并没有被指定或者修改过this所以windows普通函数内部的this默认是window,如果想要拿到objFunction函数的this可以用self去接收,也可以用箭头函数去写
function Zy() {
    this.name = "张亿"
    console.log("new调用的函数内部的this是指向实例对象的", this);
}
const name = new Zy();
//new调用后,Zy函数内部的this 是指向new出来的实例对象的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值