模拟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 @   Esther_Cheung  阅读(209)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示