本文共 1364 字,大约阅读时间需要 4 分钟。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
在JavaScript中,new关键字用于创建对象。它通过以下步骤工作:
以下是手撕代码的实现:
const _new = function () { const Fn = arguments[0]; const obj1 = {}; Object.setPrototypeOf(obj1, Fn.prototype); const obj2 = Fn.apply(obj1, [].slice.call(arguments, 1)); return obj2 instanceof Object ? obj2 : obj1;};
实现一个功能类似Object.freeze
的函数 _objectFreeze
,用以冻结对象。
const _objectFreeze = object => { if (typeof object !== 'object' || object === null) { throw new TypeError('the object is not a object'); } const keys = Object.getOwnPropertyNames(object); const symbols = Object.getOwnPropertySymbols(object); [...keys, ...symbols].forEach(key => { Object.defineProperty(object, key, { writable: false }); }); Object.seal(object); return object;};
Object.getOwnPropertyNames()
返回对象的所有自身属性,包括不可枚举属性。Object.getOwnPropertySymbols()
返回对象的所有Symbol属性。Object.defineProperty()
用于定义或修改对象的属性。Object.seal()
使对象不可扩展且属性不可配置。Object.preventExtensions()
仅阻止添加新属性,不改变属性的可配置性。这些技术细节的理解和实践,将帮助你在JavaScript开发中更好地掌握对象的创建与管理。记住,技术提升需要系统的学习和不断的实践!
转载地址:http://magfk.baihongyu.com/