模拟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 "
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)