字面量创建对象
var obj = {}
new创建对象步骤
- 创建一个新对象
- 将新对象的隐式原型(proto)指向原函数的显示原型(prptotype)
- 将this指向新对象,并执行函数,执行结果保存起来作为result
- 判断函数执行结果是不是null或者undefined,如果是返回之前的新对象,如果不是返回result
手写new
function myNew(test, ...args) {
// 创建一个空对象
let obj = {
data: 1
}
// 将创建对象的隐式原型指向创建它的显示原型
obj.__proto__ = test.prototype
// 将obj作为fn的作用域,并传入参数,执行函数
let result = test.apply(obj, args)
// 判断执行函数的结果是不是null或Undefined,如果是则返回之前的新对象,如果不是则返回result
return result instanceof Object ? result : obj
}
function test(){
}
console.log(myNew(test, [1,2,3]))
Object.create(null) 创建对象
Object.create(null) 创建对象与new创建对象区别
- new创建的对象会继承Object的方法和属性,它的隐式原型指向Object的显示原型
- Object.create(null)创建的对象原型是null,没有继承Object的方法和属性,是原型链的最顶端