企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
new、原型、继承方式、symbol、闭包内存泄漏处理、判断对象原型归属 ## js new 操作发生了什么? 1. 创建一个空对象 2. 改变原型的指向(obj.setprototype(obj,xx.prototype)) 3. 改变this指向 ~~~js /* create函数要接受不定量的参数,第一个参数是构造函数(也就是new操作符的目标函数),其余参数被构造函数使用。 new Create() 是一种js语法糖。我们可以用函数调用的方式模拟实现 */ function create(Con,...args){ //1、创建一个空的对象 let obj = {}; // let obj = Object.create({}); //2、将空对象的原型prototype指向构造函数的原型 Object.setPrototypeOf(obj,Con.prototype); // obj.__proto__ = Con.prototype //3、改变构造函数的上下文(this),并将剩余的参数传入 let result = Con.apply(obj,args); //4、在构造函数有返回值的情况进行判断 return result instanceof Object?result:obj; } ~~~ ## 判断对象原型归属# [s判断对象的属性是原型的还是实例的] isPrototypeOf、instanceof ## 闭包内存泄漏处理 参考:https://www.kancloud.cn/nfwh/javascript/2265780 javaScript在创建对象时会主动为它分配内存,不再使用时会释放其内存。(垃圾回收器会周期性找出不再使用的变量,然后释放其内存。) 闭包中的设置变量,给个名字,不用了设置为null ## symbol 找到一篇讲symbol的,讲的很好,没想到是奶子脸写的。 https://zhuanlan.zhihu.com/p/22652486 ## 原型链继承 https://zhuanlan.zhihu.com/p/356980105