优秀的编程知识分享平台

网站首页 > 技术文章 正文

js对象关联(js对象类)

nanyue 2024-08-01 22:46:12 技术文章 6 ℃

我们知道,[[Prototype]] 机制就是存在于对象中的一个内部链接,它会引用其他 对象。 通常来说,这个链接的作用是:如果在对象上没有找到需要的属性或者方法引用,引擎就 会继续在 [[Prototype]] 关联的对象上进行查找。同理,如果在后者中也没有找到需要的 引用就会继续查找它的 [[Prototype]],以此类推。这一系列对象的链接被称为“原型链”。

创建关联

我们已经明白了为什么 JavaScript 的 [[Prototype]] 机制和类不一样,也明白了它如何建立 对象间的关联。

那 [[Prototype]] 机制的意义是什么呢?为什么 JavaScript 开发者费这么大的力气(模拟 类)在代码中创建这些关联呢?

还记得Object.create(..)吗?现在是时候来弄明白为 什么了:

Object.create(..) 会创建一个新对象(bar)并把它关联到我们指定的对象(foo),这样 我们就可以充分发挥 [[Prototype]] 机制的威力(委托)并且避免不必要的麻烦(比如使 用 new 的构造函数调用会生成 .prototype 和 .constructor 引用)。

Object.create(null) 会 创 建 一 个 拥 有 空( 或 者 说 null)[[Prototype]] 链接的对象,这个对象无法进行委托。由于这个对象没有原型链,所以 instanceof 操作符无法进行判断,因此总是会返回 false。 这些特殊的空 [[Prototype]] 对象通常被称作“字典”,它们完全不会受到原 型链的干扰,因此非常适合用来存储数据。

我们并不需要类来创建两个对象之间的关系,只需要通过委托来关联对象就足够了。而 Object.create(..) 不包含任何“类的诡计”,所以它可以完美地创建我们想要的关联关系。

Object.create(..) 的第二个参数指定了需要添加到新对象中的属性名以及这些属性的属性描述符。

通常来说并不会使用 Object.create(..) 的附加功能。

最近发表
标签列表