- 普通function在没有被更改this指向的情况下默认内部this是指向window的
- 箭头函数没有特定的this指向,他的this指向的是上一级作用域的this
- 函数被谁调用他的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出来的实例对象的。