2024年最全【面试题】 JS手写ES6的Object,大厂面试官

结尾

学习html5、css、javascript这些基础知识,学习的渠道很多,就不多说了,例如,一些其他的优秀博客。但是本人觉得看书也很必要,可以节省很多时间,常见的javascript的书,例如:javascript的高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。

html5


有关Object.defineProperties()的具体细节请看我的这篇文章:[戳我传送](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)


Object.create 返回值:一个新对象,带着指定的原型对象及其属性。


**使用Object.create(null)的原因**


很多框架源码作者使用它来初始化一个新的对象,难道是最佳实践?



> 
> 通过Object.create(null)创建出来的对象,没有任何属性,显示No properties。我们可以将其当成一个干净的 map 来使用,自主定义 toString,hasOwnProperty等方法,并且不必担心将原型链上的同名方法被覆盖。
> 
> 
> 


**注意:** {...}创建的对象,使用for in遍历对象的时候,会遍历原型链上的属性,带来性能上的损耗。使用Object.create(null)则不必再对其进行遍历了。


框架源码对性能的要求极高,哪怕是一点点,都值得关注。


## 开始手写



// 第一个参数传递null时,返回的实例原型为null
// 第一个参数类型只能是object、function或者null,否则报错。
// 第二个参数类型,不能是null,否则报错
// 第二个参数如果不为 undefined ,需要将其挂载到实例的 Object.defineProperties 上。

Object.mjy_create = function(proto, defineProperties) {
if ( typeof proto !== ‘object’ && typeof proto !== ‘function’ ) {
throw new TypeError(Object prototype may only be an Object or null: ${proto})
}
if ( defineProperties === null ) {
throw new TypeError(‘Cannot convert undefined or null to object’)
}

// 定义新对象 
  const obj = {}

  // 设置原型
  // obj.__proto__ = proto // 不建议这么做了
  // 通常,应该使用 Object.setPrototypeOf() 方法来设置对象的原型。
  // 因为 Object.prototype.__proto__ 访问器已被弃用。
   Object.setPrototypeOf(obj, proto) // 建议使用setPrototypeOf设置原型

if ( defineProperties !== undefined ) {
  Object.defineProperties(obj, defineProperties)
}
return obj

}
let obj1={b:2}
let obj2 = Object.mjy_create(obj1, { a: { enumerable: false } })
console.log(obj2)//{}
let obj2_ = Object.mjy_create(obj1, { a: { enumerable: true } })
console.log(obj2_)//{ a: undefined }
let obj3 = Object.create(‘222’, undefined) // TypeError: Object prototype may only be an Object or null: 222
let obj4 = Object.create(obj1, null) // TypeError: Cannot convert undefined or null to object
console.log(obj2.a) // undefined


 


## 给大家推荐一个实用面试题库


#### **1、前端面试题库 (**面试必备) ****推荐:★★★★★****



#### 专业技能

一般来说,面试官会根据你的简历内容去提问,但是技术基础还有需要自己去准备分类,形成自己的知识体系的。简单列一下我自己遇到的一些题

* HTML+CSS
* JavaScript
* 前端框架
* 前端性能优化
* 前端监控
* 模块化+项目构建
* 代码管理
* 信息安全
* 网络协议
* 浏览器
* 算法与数据结构
* 团队管理
* **[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**

最近得空把之前遇到的面试题做了一个整理,包括我本人自己去面试遇到的,还有其他人员去面试遇到的,还有网上刷到的,我都统一的整理了一下,希望对大家有用。



**其中包含HTML、CSS、JavaScript、服务端与网络、Vue、浏览器等等**

**由于文章篇幅有限,仅展示部分内容**

![](https://img-blog.csdnimg.cn/img_convert/ac0b1c2376da47d727e0dc8a77e76478.png)

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值