js【详解】原型 vs 原型链

简介: js【详解】原型 vs 原型链

原型

  • 每个 class 都有显示原型 prototype
  • 每个实例都有隐式原型 __proto__
  • 实例的 __proto__ 指向对应 class 的 prototype

如下范例: class Student 创建了 实例 xialuo

  • 获取属性 xialuo.name 或执行方法 xialuo.sayhi()时,先在自身属性和方法寻找,如果找不到则自动去_proto_ 中查找

原型链

【下图需能手绘!】

  • 通过 hasOwnProperty 可以判断某属性是否为实例自己的属性

实战 – 绘制原型链图

范例1

const obj1 = {
  a: 10,
};

Object.prototype.__proto__ === null   // true
obj1.__proto__.__proto__ === null     // true
obj1.__proto__ === Object.prototype   // true

实例的隐式原型指向类的显式原型

范例3

const obj1 = {
  a: 10,
};

const obj2 = Object.create(obj1);

Object.create() 的参数为对象实例时,返回一个以该对象实例为隐式原型的对象。

obj2.__proto__ === obj1       // true

范例3

const obj3 = Object.create(null);

Object.create() 的参数为 null 时,返回一个无原型也无属性的空对象。

【考题】new Object() 和 Object.create() 的区别

  • new Object() 等同于 {} ,其隐式原型是 Object.prototype
  • Object.create()
  • 参数为 null 时,返回一个无原型也无属性的空对象
  • 参数为对象实例时,返回一个以该对象实例为隐式原型的对象。
const obj1 = {
  a: 10,
};

const obj2 = new Object({
  a: 10,
});

const obj3 = new Object(obj1);

console.log(obj1 === obj2); // false
console.log(obj1 === obj3); // true

目录
相关文章
|
2月前
|
JavaScript 前端开发 开发者
理解JavaScript中的原型链:基础与实践
【10月更文挑战第8天】理解JavaScript中的原型链:基础与实践
|
28天前
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
25 1
JavaScript中的原型 保姆级文章一文搞懂
|
4月前
|
JavaScript 前端开发
如何在JavaScript中实现基于原型的继承机制
【8月更文挑战第14天】如何在JavaScript中实现基于原型的继承机制
31 0
|
1月前
|
JavaScript 前端开发
JavaScript 原型链的实现原理是什么?
JavaScript 原型链的实现原理是通过构造函数的`prototype`属性、对象的`__proto__`属性以及属性查找机制等相互配合,构建了一个从对象到`Object.prototype`的链式结构,实现了对象之间的继承、属性共享和动态扩展等功能,为 JavaScript 的面向对象编程提供了强大的支持。
|
1月前
|
JavaScript 前端开发
原型链在 JavaScript 中的作用是什么?
原型链是 JavaScript 中实现面向对象编程的重要机制之一,它为代码的组织、复用、扩展和多态性提供了强大的支持,使得 JavaScript 能够以简洁而灵活的方式构建复杂的应用程序。深入理解和熟练运用原型链,对于提升 JavaScript 编程能力和开发高质量的应用具有重要意义。
|
1月前
|
JavaScript 前端开发
如何使用原型链继承实现 JavaScript 继承?
【10月更文挑战第22天】使用原型链继承可以实现JavaScript中的继承关系,但需要注意其共享性、查找效率以及参数传递等问题,根据具体的应用场景合理地选择和使用继承方式,以满足代码的复用性和可维护性要求。
|
2月前
|
JavaScript 前端开发 开发者
探索JavaScript原型链:深入理解与实战应用
【10月更文挑战第21天】探索JavaScript原型链:深入理解与实战应用
33 1
|
29天前
|
JavaScript 前端开发 开发者
JavaScript框架React vs. Vue:一场性能与易用性的较量
JavaScript框架React vs. Vue:一场性能与易用性的较量
34 0
|
2月前
|
JavaScript 前端开发 开发者
深入理解JavaScript原型链:从基础到进阶
【10月更文挑战第13天】深入理解JavaScript原型链:从基础到进阶
30 0
|
2月前
|
JavaScript 前端开发 开发者
原型链深入解析:JavaScript中的核心机制
【10月更文挑战第13天】原型链深入解析:JavaScript中的核心机制
38 0