| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> JavaScript知识库 -> 第九章:类和模块 -> 正文阅读 |
|
|
[JavaScript知识库]第九章:类和模块 |
|
原型和原型链是JavaScript中的难点也是重点,这里建议先阅读第六章中关于原型和原型链的部分再来阅读此处。 原型
????????所有对象
(null除外)都拥有
__proto__
属性,该属性是一个指针,指向该对象的构造方法(对象)的prototype对象(
隐式原型
)。
????????所有函数
拥有
prototype
属性(
显式原型
,
仅限函数
),这个属性是一个指针,
指向一个对象
,这个对象的用途就是
包含所有实例共享的属性和方法
(该对象叫做
原型对象
)。原型对象也有一个属性,叫做constructor
,这个
属性包含了一个指针,指回原构造函数
。
Javascript中所有的对象都是Object的实例
,并继承Object.prototype的属性和方法,也就是说,Object.prototype是所有对象的父亲。
????????在对象创建时,就会有一些预定义的属性,其中
定义函数的时候,这个预定义属性就是 prototype,
这个prototype是一个普通的对象。而
定义普通的对象的时候,就会生成一个 __proto__
,
这个__proto__指向的是这个对象的构造函数(也是对象)的prototype
。
?
? ? ? ? ? ?如上图所示,数组a在创建时生成一个__proto__对象,该对象指向构造函数Array的prototype对象。同时Array.prototype.__proto__指向Object.prototype,所以a.__proto__.__proto__也指向Object.prototype。
????????如上图所示,创建构造函数B以及它的实例c,则c.__proto__指向构造函数B的原型prototype,所以两者是相等的。 原型链????????前面提到过__proto__是一个指针对象(属性),它指向的是构造它的对象的构造函数(对象)的prototype属性(对象)。几乎所有的javascript对象都有__proto__这样一个指 针包括Object。
????????如上图所示,可以看到a = 1;实际相当于a = new Number(1);,所有内建对象及Object的__proto__指向的都是一个匿名函数,可以认为它们其实也是function的一个实例。并且我们知道Number.prototype对象(即a.__proto__)是没有toString()方法的,但是a却可以调用该方法,这就是原型链的作用。
????????如上图所示,a.__proto__.__proto__指向的是Object对象,而Object对象是有toString()方法的,所以对象a能调用toStirng()方法。a的原型链就是由Number.prototype和Object.prototype成,当a访问一个方法或属性时,它会先在自身查找,然后再沿原型链找,找到则调用,没找到报错。 ? ????????如果给Number.prototype添加toString()方法,则a在查找到原型链的Number.prototype(即a.__proto__)上时发现了toString()方法,则会使用该方法而不是继续沿着原型链查找,并且几乎所有的对象的原型链的终点都是Object.prototype。
????????__proto__是实现原型链的关键,而prototype则是原型链的组成。
????????
? ? ? ? 在网上找了张图:
|
|
|
| JavaScript知识库 最新文章 |
| ES6的相关知识点 |
| react 函数式组件 & react其他一些总结 |
| Vue基础超详细 |
| 前端JS也可以连点成线(Vue中运用 AntVG6) |
| Vue事件处理的基本使用 |
| Vue后台项目的记录 (一) |
| 前后端分离vue跨域,devServer配置proxy代理 |
| TypeScript |
| 初识vuex |
| vue项目安装包指令收集 |
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年12日历 | -2025/12/3 17:12:23- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |