This的指向规则:
谁调用就指向谁。
事件监听函数内部,this会指向监听的那个元素节点。
在构造函数中,this指向New出来的新对象。
对于箭头函数,自身没有变量,所有指向环境中的this。
如果一个函数没有被调用,也就是普通调用,this指向全局变量。
在严格的情况下,this为Undefined。
new 的过程
若执行 new Foo(),过程如下:
1) 第一步:创建对象 obj;
2) 第二步:原型赋值
3) 第三步:Foo函数执行,this指向obj对象,给obj添加属性。
4) 第四步:判断构造函数是否返回对象数据类型,如果返回,则返回那个对象,如果没有返回则返回obj对象
let a = new fn('张三', 20);
function Foo(name, age) {
this.name = name;
this.age = age;
// return { name: name }
}
Foo.prototype.fn = function () {
console.log(this.name)
}
let a = new Foo('张三', 20);
console.log(a);
function fn() {
// 第一步:创建对象
var obj = {};
// 第二步:原型赋值
obj.__proto__ = Foo.prototype;
// 第三步:Foo函数执行,this指向obj对象,给obj添加属性。
let result = Foo.call(obj, '张三', 20)
// 第四步:判断构造函数是否返回对象数据类型,如果返回,则返回那个对象,如果没有返回则返回obj对象
return typeof result === 'object' ? result : obj;
}
let b = fn();
console.log(b);