new 生成实例的过程是:this
1.建立一个对象,该对象继承做为class的function的原型。spa
2,执行做为class的function,并改变上下文 this.prototype
3,若是执行的function return Object 则返回function 返回的Object,不然,则生成一个新的对象(继承于该function原型);code
//本身编的对象
1 var new2 = function(fn) { 2 var k = function(){return {}}; 3 var kk =fn.call(k()); 4 if(typeof kk !=='object' ){ 5 kk = k(); 6 }; 7 kk.__proto__ = fn.prototype; 8 kk.__proto__.constructor = fn; 9 return kk; 10 11 } 12 13 function lala(){ 14 this.name = 'ana'; 15 return {}; 16 }; 17 18 19 var m = new2 (lala); 20 21 22 m instanceof lala; //true 23 24 m.__proto__.constructor ==lala; //true 25 26 m instanceof Object; //true 27 28 29 lala.prototype.say =function() { 30 31 return 'ha '; 32 } 33 34 m.say() // "ha "