js手動でnew、instance ofを実現

666 ワード

以下の方法は直接測定して有効です.
newを実現
function _new(fn, ...args) {
    //       
    let obj = new Object();
    obj.__proto__ = fn.prototype; // obj __proto__  fn prototype,    
    let result = fn.apply(obj, args) //  this   
    return typeof result === "object" ? result : obj;
}
instance ofを実現
function instance_of(L, R) { //L      object,R      constructor
    const R_P = R.prototype; //   R      
    L = L.__proto__; //   L      ,              
    while (true) {
        if (L === null)
            return false;
        if (R_P === L) //     :     true 
            return true;
        L = L.__proto__;
    }
}