js中的new操作符MDN中是这样说的。new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。
我们使用new就是实例化一个类的过程。这个过程中会进行以下几步:
- 步骤如下
- 创建一个对象
- 让对象的proto指向构造函数的原型
- 让构造函数运行并且将this指向这个对象
- 返回这个对象。
function myNew(constructor, ...rest) {
// let obj = {}
// obj.__proto__ = constructor.prototype
// constructor.call(obj, ...rest)
// return obj
let child= Object.create(constructor.prototype)
constructor.apply(child,rest)
return child
}
现在我们试一下
// 自己的new
function myNew(constructor, ...rest) {
if (typeof constructor === "function") {
// let obj = {}
// obj.__proto__ = constructor.prototype
// constructor.call(obj, ...rest)
// return obj
let child= Object.create(constructor.prototype)
constructor.apply(child,rest)
return child
}
}
// 构造函数F
function F(name) {
this.name = name
this.hello=function () {
console.log('hello')
}
}
F.prototype.ok=function(){
console.log('ok')
}
// 当前构造函数的实例
let f = myNew(F,'alex')
console.log(f.name) // alex
f.hello() // hello
f.ok() // ok
网友评论