JavaScript中的原型 保姆级文章一文搞懂

简介: 本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。

JavaScript中的原型 一文搞懂

🎉🎉🎉欢迎来到我的博客,我是一名自学了2年半前端的大一学生,熟悉的技术是JavaScript与Vue.目前正在往全栈方向前进, 如果我的博客给您带来了帮助欢迎您关注我,我将会持续不断的更新文章!!!🙏🙏🙏

1.前言

在js中所有东西都可以当成一个对象,但是因为js不是一门完全的面向对象的语言,于是js作者想出了使用原型这种方式来实现继承.

2.构造函数

在js中可以通过构造函数来实现面向对象中的Class(类).

function Person(name,age){
   
    this.name = name;
    this.age = age;
}

const a = new Person("雨溪",18); // a变量就是Person的实例对象;

ES6中的class可以看作只是一个语法糖,它的绝大部分的功能,ES5都可以做到,新的class写法只是让原型的写法更加的清晰、更像面向对象编程的语法而已。

3.原型

此时访问a.getName()就是访问的Person的原型对象的getName方法,因为当我们调用对象的方法时,js会顺着原型链一直一直上去找,那我们的==a==与==Person==对象又有什么关系呢?

function Person(name,age){
   
    this.name = name;
    this.age = age;
}
Person.prototype.getName = function () {
   
    return this.name;
};

const a = new Person("雨溪",18);
console.log(a.getName())

当我们在js中访问一个对象上的属性的时候js会一层一层往上面找如果该对象没有该属性则会到该对象的构造函数的原型对象上找.

变量==a==的构造函数就是==Person==,而Person的原型对象上就有getName方法,所以当我们调用a.getName()时,js就会一直往上面找,找到了Person的原型对象上,所以代码才会正常运行.
在这里插入图片描述

4.proto

每个对象身上都会有proto这个属性,它指向这个对象的构造函数的原型.

function Person(name,age){
   
    this.name = name;
    this.age = age;
}
Person.prototype.getName = function(){
   
    return "雨溪"
}

const a = new Person("雨溪",18); // a变量就是Person的实例对象;
console.log(a.__proto__) // {getName()}

构造函数或者函数的proto属性指向Function的原型,并且js中所有对象的顶层都是大Object.

function Person(name,age){
   
    this.name = name;
    this.age = age;
}

const a = new Person("雨溪",18); 
console.log(a.__proto__) // Person.prototype
console.log(Person.__proto__) // Function.prototype
console.log(Person.__proto__.__proto__) // Object.prototype
console.log(Person.__proto__.__proto__.__proto__) // null

5.constructor

同理,每个对象都有它自己的构造函数,constructor属性就是指向对象的构造函数的.

function Person(name,age){
   
    this.name = name;
    this.age = age;
}
Person.prototype.getName = function(){
   
    return "雨溪"
}

const a = new Person("雨溪",18); // a变量就是Person的实例对象;
console.log(a.constructor) // Person

6.原型链

前面说了,在js中当我们调用对象的方法或者属性时会一层一层往上找,直到找到Object的原型对象,再往上就没有了.

下面一个图带大家理解一下原型链

img

原型链的作用就是可以让js实现面向对象的继承机制,子类可以通过原型链访问到父亲的原型上的属性.

7.总结

其实大家如果学过面向对象的编程语言的话,理解这个其实很简单,js只是使用了另一种方式来实现了继承.关键就是通过原型链查找或者复制父亲的原型方法和属性以达到继承的效果.

Hi👋,这里是瑞雨溪->一个喜欢JavaScript和Vue的大学生,如果我的文章给你带来的帮助,欢迎您关注我->我会持续不断的更新更多优质文章.你的关注就是我的动力!!!🎉🎉🎉

相关文章
|
5月前
|
设计模式 JavaScript 前端开发
【JavaScript】深入浅出JavaScript继承机制:解密原型、原型链与面向对象实战攻略
JavaScript的继承机制基于原型链,它定义了对象属性和方法的查找规则。每个对象都有一个原型,通过原型链,对象能访问到构造函数原型上的方法。例如`Animal.prototype`上的`speak`方法可被`Animal`实例访问。原型链的尽头是`Object.prototype`,其`[[Prototype]]`为`null`。继承方式包括原型链继承(通过`Object.create`)、构造函数继承(使用`call`或`apply`)和组合继承(结合两者)。ES6的`class`语法是语法糖,但底层仍基于原型。继承选择应根据需求,理解原型链原理对JavaScript面向对象编程至关重要
137 7
【JavaScript】深入浅出JavaScript继承机制:解密原型、原型链与面向对象实战攻略
|
6月前
|
存储 JavaScript 前端开发
【JavaScript保姆级教程】数组的基本使用
【JavaScript保姆级教程】数组的基本使用
|
6月前
|
JavaScript 前端开发
【Javascript保姆级教程】if判断语句的三种形式
【Javascript保姆级教程】if判断语句的三种形式
168 0
|
6月前
|
存储 JavaScript 前端开发
【JavaScript保姆级教程】Javascript常量
【JavaScript保姆级教程】Javascript常量
236 0
|
JSON JavaScript 前端开发
|
JavaScript 前端开发 Java
CocosCreator 面试题(三)JavaScript闭包原理和作用
CocosCreator 面试题(三)JavaScript闭包原理和作用
183 0
|
移动开发 JavaScript 前端开发
JavaScript基础知识梳理-上
对JavaScript基础知识梳理-上
231 31
JavaScript基础知识梳理-上
|
JavaScript 前端开发 测试技术
web前端面试高频考点——JavaScript 篇(一)【JS的三座大山 】 原型和原型链、作用域和闭包、异步
web前端面试高频考点——JavaScript 篇(一)【JS的三座大山 】 原型和原型链、作用域和闭包、异步
132 0
|
存储 前端开发 JavaScript
前端祖传三件套JavaScript的对象之基础概念的方法
在 JavaScript 中,对象是一个非常重要的数据类型,用于表示一组相关属性和方法。每个对象都有一些方法,这些方法可以是对象自身定义的方法,也可以是从原型链中继承而来的方法。本文将介绍对象方法的概念、分类和使用方法。
60 0
|
存储 前端开发 JavaScript
前端祖传三件套JavaScript的对象之基础概念的属性
在 JavaScript 中,对象是一种非常重要的数据类型,用于表示一组相关属性和方法。每个对象都有一些属性,这些属性可以是数据属性或访问器属性。本文将介绍对象属性的概念、分类和使用方法。
89 0
下一篇
无影云桌面