用 new 关键字来调用的函数,称为构造函数。构造函数首字母一般大写
function Foo(name){
this.name = name
}
构造函数的执行过程
- 当以 new 关键字调用时,会创建一个新的内存空间,为实例对象。
- 函数体内部的 this 指向该实例对象。
- 给 this 添加属性,就相当于给实例添加属性。
- 默认返回 this
手写new
//new 做了两件事
//1.将新创建的对象的原型指向构造函数的原型 user.__proto__ = User.prototype
//2.改变this的指向,指向新生成的对象
function User(name){
this.name =name
}
function myNew(fun,...args){
let b = {}
b.__proto__ = Object.create(fun.prototype)
fun.call(b,...args)
return b
}
let a = myNew(User,"jack")
console.dir(a)