一、js原型链
原型链类 :(原型对象 , 构造函数 ,实例)

- 原型:每个函数都有 prototype 属性,该属性指向原型对象;使用原型对象的好处是所有对象实例共享它所包含的属性和方法。
- 原型链:主要解决了继承的问题;每个对象都拥有一个原型对象,通过__proto__ 指针指向其原型对象,并从中继承方法和属性,同时原型对象也可能拥有原型,这样一层一层,最终指向 null。
原型的作用:
1.数据共享 节约内存空间
2.实现继承
注意:函数也是一个对象,对象不一定是函数。对象有__proto__属性,函数有prototype属性
二、new对象的时候发生了什么?
function Person(name, age) {
this.name = name
this.age = age
}
let p = new Person("Alice", 23)
以下为new Person() 的过程
1、创建一个空对象
let obj = {}
2、将空对象的原型对象指向构造函数的原型属性。从而继承原型方法。
obj.__proto__ = Person.prototype
3、this指向空对象。执行构造函数中的代码,以获得私有属性。
let result = Person.call(obj)
4、判断构造函数的返回值类型,如果是值类型,则返回新对象。如果是引用类型,就返回这个引用类型的对象。
if (typeof(result) == "object"){
return p = result
}else{
return p = obj
}