ew运算符工作原理(new运算符的伪码实现)

// 只要函数创建,就有一个prototype属性
// 构造函数和普通函数的区别就是调用的时候又没有用 new function Fn() {
  // this 就是实例化后的对象 var this = { __proto__: Fn.prototype }; this.XXX = XXX; return this; } Fn.prototype = {}; // 原型
Fn.constructor = Fn;

obj->Fn.prototype->Object.prototype->null

  

//new运算符的伪码实现  
function _new(clazz, args){  
    //clone(clazz.prototype)  
    var this = {};  
    this.__proto__ = clazz.prototype;  
    var obj  = clazz.apply(this, args);  
    var type = typeof obj;  
    if(type == "object" && obj !== null || type == "function"){  
        return obj;  
    }else{  
        return this;  
    }  
    /* 另一种写法 
    if(obj === null || type == "undefined" || type == "boolean" || type == "number" || type == "string"){ 
        return this; 
    }else{ 
        return obj; 
    } 
    */  
}  
var a = new ClassA(1,2);  
var a = _new(ClassA, [1,2]);  //伪码  

  

上一篇:会员管理小程序实战开发教程-消费记录功能


下一篇:mysql表例子(斗地主): 1.account 2.player 思考mongo是account是在GlobalServer上,游戏Role是在GameServer上创建