【面试题】原型与原型链 进一步理解~

简介: 【面试题】原型与原型链 进一步理解~

j这段时间参与到很多的笔试机会,大部分都考察到对原型上的理解和使用。

现对该知识进行一定的总结和回想。

原型与原型链

存在的以下的规则:

  1. 每一个构造器(一般为函数)都有 prototype 指向他的原型对象
  2. 每一个原型对象都有 construtor 指向他的构造器
  3. 由构造器创建的对象都有 __proto__ 指向原型对象
  4. 最高层的原型对象的 __proto__ 指向null

简单来说就如图所示

代码解释:

function Person() {
    /* 构造器 */
}
Person.prototype.constructor === Persion() // true
const person = new Person() // 初始化一个实例
person.__proto__ === Persion.prototype // true (实例的__proto__ 与 构造器都是指向同一个原型对象的

更高层的原型链

运用场景:

原型与原型链主要的运用场景是:当我们使用实例的某个方法或是属性时,会发现本身该实例上并没有绑定相对应的方法或属性,但他又确实能拿到该方法会属性。这就是原型链带来的影响:当一个实例使用到本身不具备的方法或属性,他会通过原型链形式一层层向上查找,直到找不到报错的形式。

实例上自己绑定的方法或属性的优先级大于原型链上的绑定的

代码解释: (还是使用上面的例子哈

function Person() {
    /* 构造器 */
}
++ Person.prototype.name = 'chuguo'
const person = new Person() // 初始化一个实例
console.log(person.name) // chuguo 本身在该实例上没有name属性 但在原型链上存在name 因此直接调来用 
/* 实例方式或属性的与原型链上的优先级 */
function Person() {
    /* 构造器 */
++  this.name = 'hello'
}
Person.prototype.name = 'chuguo'
const person = new Person() // 初始化一个实例
console.log(person.name) // hello 

Function原型

在ES6出现之前,初始化一个实例都是通过函数构造器形式进行初始化的

但有一点很特殊:实例的 __proto__ 并不是指向 Function.prototype

图片解释:

代码解释:

function Person() {
    /* 构造器 */
}
Person.prototype.name = 'chuguo'
Function.prototype.name = 'function'
const person = new Person() // 初始化一个实例
console.log(person.name) // chuguo 
console.log(person.__proto__ === Function.prototype) // false 实例的原型对象并不等于Function的原型对象
console.log(Person.__proto__ === Function.prototype) // true 能理解为每个函数构造器都是 函数原型实例化的结果

总结

总的来说:原型与原型链的出现大大补充JavaScript关于继承的缺失。

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

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

地址:前端面试题库

相关文章
|
6月前
|
JavaScript 前端开发
【面试题】最详尽的 JS 原型与原型链终极详解(一)
【面试题】最详尽的 JS 原型与原型链终极详解(一)
137 0
|
JavaScript 前端开发
原型与原型链,数形结合搞懂原型与原型链,真正理解原型链,面试官直呼内行。
原型与原型链,数形结合搞懂原型与原型链,真正理解原型链,面试官直呼内行。
|
6月前
|
设计模式 前端开发 JavaScript
【面试题】 对象、原型、原型链与继承?这次我懂了!
【面试题】 对象、原型、原型链与继承?这次我懂了!
|
6月前
|
JavaScript 前端开发 Java
【面试常见】JS继承与原型、原型链
【面试常见】JS继承与原型、原型链
|
6月前
|
设计模式 前端开发 JavaScript
【面试题】对象、原型、原型链与继承 ,你了解多少?
【面试题】对象、原型、原型链与继承 ,你了解多少?
|
JavaScript
原型与原型链,数形结合搞懂原型与原型链,真正理解原型链,面试官直呼内行。(二)
原型与原型链,数形结合搞懂原型与原型链,真正理解原型链,面试官直呼内行。
|
JavaScript 前端开发
原型与原型链,数形结合搞懂原型与原型链,真正理解原型链,面试官直呼内行。(一)
原型与原型链,数形结合搞懂原型与原型链,真正理解原型链,面试官直呼内行。
|
JavaScript 前端开发
【面试常见】JS继承与原型、原型链
在 JavaScript 中,继承是实现代码复用和构建对象关系的重要概念。本文将讨论原型链继承、构造函数继承以及组合继承等几种常见的继承方式,并提供相应的示例代码,并分析它们的特点、优缺点以及适用场景。 在开始讲解 JavaScript 的继承方式之前,我们先来详细解释一下原型(prototype)、构造函数(constructor)和实例对象(instance)这三个概念。因为只有对它们有清晰的理解,才能更好地理解和应用JavaScript的继承机制。现在我们将分别介绍它们的含义和它们之间的关系。 建议点赞收藏本文章,以便日后复习~~
245 0
【面试常见】JS继承与原型、原型链
|
JavaScript 前端开发 测试技术
web前端面试高频考点——JavaScript 篇(一)【JS的三座大山 】 原型和原型链、作用域和闭包、异步
web前端面试高频考点——JavaScript 篇(一)【JS的三座大山 】 原型和原型链、作用域和闭包、异步
131 0
|
JavaScript 前端开发
面试官:聊聊js原型
面试官:聊聊js原型
104 0