new 一个函数
在JS中,new的作用是通过构造函数来创建一个实例对象 我们来看一个例子
function Foo(name) {
this.name = name
}
var foo = new Foo()
上面的new操作,干了下面三件事
- 创建一个空对象
var obj = {}
- 将空对象原型的内存地址
__proto__指向函数的原型对象
obj.__proto__ = Foo.prototype
- 利用函数的call方法,将原本指向window的绑定对象this指向了obj。
Foo.call(obj, 'hello')
手写实现new
function create(fn, ...args) {
const obj = Object.create(fn.prototype)
const res = fn.apply(obj, args)
return res instanceof Object ? res : obj
}
// 测试结果
function create(fn, ...args) {
const obj = Object.create(fn.prototype)
const res = fn.apply(obj, args)
return res instanceof Object ? res : obj
}
function Foo(name) {
this.name = name
}
Foo.prototype.say = function() {
console.log(this.name)
}
const foo = create(Foo, 'abc')
foo.say() // abc