前置知识
-
每个函数都有一个原型(对象) prototype
-
每个对象都有一个属性
__proto__指向其构造函数的原型对象 prototype注意:原型对象也是对象,也会有
__proto__属性指向它构造函数的原型对象 prototype -
每个原型对象都有一个属性
constructor指向构造函数
关键点:只要分清它是函数还是对象,它除了是函数之外,还会是谁的实例对象。比如说,构造函数虽然是函数,有自己的 prototype,但它也是 Function 的对象,会有
__proto__,指向 Function.prototype
原型链
new 干了什么?
- 创建一个独立内存空间的空对象
- 把这个对象的构造原型(
__proto__)指向函数的原型对象prototype,并绑定this - 执行构造函数里的代码
- 如果构造函数有 return 就返回 return 的值,如果没有就自动返回空对象也就是this
如果构造函数返回的是引用类型的对象,则会直接返回这个对象,而不是创建一个新实例对象,所以构造函数里面最好不要返回引用类型的对象,返回基本类型不影响
function Person(name){
this.name = name
console.log(this) // { name: '沐华' }
return { age: 18 }
}
const p = new Person('沐华')
console.log(p) // { age: 18 }