模拟JS 的new 运算符

 

new 生成实例的过程是:

1.创建一个对象,该对象继承作为class的function的原型。

2,执行作为class的function,并改变上下文 this.

3,如果执行的function return Object 则返回function 返回的Object,否则,则生成一个新的对象(继承于该function原型);

//自己编的

 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 "

 

posted @ 2018-08-30 15:28  Esther_Cheung  阅读(214)  评论(0)    收藏  举报