nfssuzukaze / Blog

0 stars 0 forks source link

原型与原型链以及 new 的模拟实现 #17

Open nfssuzukaze opened 3 years ago

nfssuzukaze commented 3 years ago

原型与原型链及 new 的模拟实现

原型与原型链

1.原型的基本概念:

2.实例与原型的关系:

new 的执行过程及相应模拟

function Foo() {...}
let f1 = new Foo()  // 与 let f1 = new Foo 的效果一样

new 的执行过程

new 的模拟实现

function _new(constructFunction, ...args) {
    let obj = Object.create(constructFunction.prototype) 
    // 创建一个新对象,其原型是构造函数的prototype
    // 等价于 let obj = {}, obj.__proto__ = constructFunction.prototype
    let result = constructFunction.call(obj, ...args)
    // 执行构造函数,同时将函数中的this指向obj实例对象,并创建一个result变量用来存储执行constructFunction所返回的值
    if ((result !== null && typeof (result) === 'object') || typeof (result) === 'function') {
    return result;
        // 若原函数返回的是引用类型值,则返回值不作变动
    }
    return obj
    // 若原函数返回的不是引用类型值,则返回新创建的实例对象
}