前端 js 经典:原型对象和原型链

简介: 前端 js 经典:原型对象和原型链

1. 原型对象和构造函数纠缠不清的一生

// prototype 函数类型的数据,都有一个叫做 prototype 的属性。
// 这个属性指向的是一个对象,就是所谓的原型对象。
function fn() {}
fn.prototype; // { constructor: f } 这个就是原型对象
 
// constructor 属性指向它的构造函数
fn == fn.prototype.constructor; // true

2. 原型对象的作用

最主要的作用就是用来存放实例对象的公有属性和方法,不然每次创建实例,相同的属性和方法都会重复创建,浪费内存。

function Person(name, age) {
  this.name = name;
  this.age = age;
}
 
Person.prototype.type = "people";
Person.prototype.say = function () {
  console.log("呀食勒没啊");
};
 
// 实例对象在自己这找不到对应的属性和方法,就会去构造函数的原型对象找。
// 如果有,就返回。如果没有,就会沿着__proto__继续往父级找,直到为null为止
let yqcoder = new Person("yqcoder", 18);
yqcoder.type; // people
yqcoder.say(); // 呀食勒没啊
yqcoder.constructor; // 查看对象的构造函数 Person() {}

3. 原型链

// prototype 显示原型,这是函数类型数据的属性,指向原型对象
// __proto__ 隐式原型,这是对象类型数据的属性,指向原型对象
Person.prototype == yqcoder.__proto__; // true
 
// 实例对象如果顺着__proto__属性一直往父级的原型对象找,都没找到就返回undefined。
// yqcoder.__proto__.__proto__.__proto__ 这种结构就叫原型链,也叫隐式原型链。
// 它的终点就是Object.prototype指向的原型对象,下一个__proto__就为null了
yqcoder.love; // undefined

4. 万物皆对象

// 函数也是对象,那么函数也有__proto__指向原型对象。
// 原型对象里的constructor指向构造函数Function
Person.__proto__ == Function.prototype; // true

5. 总结

术的尽头,气体源流

原型的尽头,Object.prototype


目录
相关文章
|
6天前
|
数据可视化 前端开发 JavaScript
前端框架与库-D3.js数据可视化基础
【7月更文挑战第21天】D3.js是Web开发中创建动态、交互图表的利器,适用于从基础条形图到复杂地理热力图的广泛需求。核心概念涉及数据绑定至DOM,支持动态更新。初学者常遇难题包括不当数据绑定、选择器误用、过渡动画过量及坐标轴配置失误。避免策略需善用`.data()`, `.enter().append()`, `.exit().remove()`管理数据,熟知选择器差异,适度应用`.transition()`, 并精准设定坐标轴。示例条形图代码展示了数据绑定至`<rect>`元素的过程,奠定基础,助你进阶复杂项目。
|
10天前
|
Web App开发 存储 JavaScript
前端如何学习Node.js及Node.js的主要用途
【7月更文挑战第16天】 学习Node.js对前端开发者至关重要,涉及理解其基于V8的运行时环境、JavaScript基础、安装与验证、核心模块(如fs、http、path)及npm管理。实践项目,如用Express建服务器,参与开源,深入学习异步编程和事件循环。Node.js用于服务器开发、构建工具、本地开发服务器和实时应用,提升全栈能力。借助官方文档和各种资源加速学习。
21 4
|
13天前
|
缓存 JavaScript 前端开发
前端框架与库 - Vue.js基础:模板语法、数据绑定
【7月更文挑战第14天】Vue.js 是渐进式框架,以简洁API和高效数据绑定知名。本文聚焦模板语法与数据绑定,解释常见问题和易错点,助力初学者避坑。模板语法中,{{ expression }} 用于渲染值,v-bind/: 用于动态绑定属性。数据绑定涉及文本、属性和事件,注意v-model适用于表单元素,计算属性有缓存。理解正确用法,借助文档和IDE,可提升开发质量和效率。善用Vue.js,打造响应式UI。
|
12天前
|
JavaScript 前端开发 API
前端框架与库 - Vue.js 组件与路由
【7月更文挑战第15天】Vue.js 框架以简洁API和高效DOM更新著名,组件和路由是构建应用的关键。组件是自包含的实例,常见问题包括命名冲突、作用域混淆和状态管理。要避免这些问题,可使用命名空间、明确数据绑定和事件,以及采用Vuex管理状态。Vue Router提供声明式路由,常见挑战包括路由守卫、动态路由参数和懒加载配置。正确使用路由守卫、处理动态参数和实现代码分割能优化路由管理。提供的代码示例展示了基本组件和路由配置。
|
1月前
|
前端开发 JavaScript 数据库
如何实现前后端分离-----前端笔记
如何实现前后端分离-----前端笔记
|
1月前
|
前端开发 安全 NoSQL
技术笔记:Security前端页面配置
技术笔记:Security前端页面配置
|
1月前
|
JSON 前端开发 JavaScript
前端Ajax、Axios和Fetch的用法和区别笔记
前端Ajax、Axios和Fetch的用法和区别笔记
40 2
|
2月前
|
存储 前端开发 JavaScript
前端笔记_OAuth规则机制下实现个人站点接入qq三方登录
前端笔记_OAuth规则机制下实现个人站点接入qq三方登录
60 1
|
2月前
|
移动开发 前端开发 JavaScript
10款精美的web前端源码的特效,2024年最新面试题+笔记+项目实战
10款精美的web前端源码的特效,2024年最新面试题+笔记+项目实战
|
2月前
|
前端开发 容器
CSS3属性详解(一)文本 盒模型中的 box-ssize 属性 处理兼容性问题:私有前缀 边框 背景属性 渐变 前端开发入门笔记(七)
CSS3属性详解(一)文本 盒模型中的 box-ssize 属性 处理兼容性问题:私有前缀 边框 背景属性 渐变 前端开发入门笔记(七)
50 2