当前位置: 首页 > news >正文

〖大前端 - 基础入门三大核心之JS篇(56)〗- 内置构造函数

  • 说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费如需要项目实战或者是体系化资源,文末名片加V!
  • 作者:哈哥撩编程,十余年工作经验, 从事过全栈研发、产品经理等工作,目前在公司担任研发部门CTO。
  • 荣誉:2022年度博客之星Top4、2023年度超级个体得主、谷歌与亚马逊开发者大会特约speaker全栈领域优质创作者

  • 🏆 白宝书系列
    • 🏅 启示录 - 攻城狮的自我修养
    • 🏅 Python全栈白宝书
    • 🏅 ChatGPT实践指南白宝书
    • 🏅 产品思维训练白宝书
    • 🏅 全域运营实战白宝书
    • 🏅 大前端全栈架构白宝书


文章目录

  • ⭐ 内置构造函数
  • ⭐ Obejct和Function

⭐ 内置构造函数

JavaScript有很多内置构造函数,比如Array就是数组类型的构造函数,Function就是函数类型的构造函数,Object就是对象类型的构造函数

内置构造函数非常有用,所有该类型的方法都是定义在它的内置构造函数的prototype上的(比如数组的pop()方法、slice()方法都是定义在Array的prototype上的,由于数组都可以看作是Array的示例,所以数组就可以通过原型链的方式去调用这些方法。),我们也可以给这个对象添加新的方法,从而拓展某类型的功能

image-20231113142647994

下面来敲一些demo验证一下上面的结论:

// 数组的内置构造函数,任何的数组都可以看作是Array的实例
console.log([1, 2, 3] instanceof Array);    // true
console.log([] instanceof Array);           // truevar arr = new Array(5);    // 得到一个长度为5的空数组
console.log(arr);
console.log(arr.length);// 函数的内置构造函数
function fun() {}
function add(a, b) {return a + b;
}
console.log(fun instanceof Function);   // true
console.log(add instanceof Function);   // truevar jianfa = new Function('a', 'b', 'return a - b');
console.log(jianfa(8, 3));// 对象的内置构造函数
console.log({ a: 1 } instanceof Object);   // true
console.log({} instanceof Object);       // truevar o = new Object();   // 得到一个空对象
o.a = 1;
o.b = 1;
console.log(o);

image-20231113144732076

上面还提到,我们可以给对象添加新的方法,从而拓展某类型的功能,那么如何扩展一个对象的方法呢?下面我们就来写一个扩展数组对象的方法的demo:

// 拓展数组的方法,实现数组的“求和”
Array.prototype.qiuhe = function () {// 备份上下文var arr = this;// 累加器var sum = 0;for (i = 0; i < arr.length; i++) {sum += arr[i];}return sum;
}var arr = [1, 2, 3, 4];
var result = arr.qiuhe();   // 数组可以调用求和方法了
console.log(result);

image-20231113150345000

注意:面试的时候会经常考到给数组添加一些新的功能,一定要记得可以利用原型链的原理往Array.prototype上添加新的方法至于算法方面,就要多刷算法题提高自己的算法思想


⭐ Obejct和Function

  • Obeject.prototype是万物原型链的终点。

  • 任何函数都可以看作是Function new 出来的

Object本身是函数,所以Object又可以看作是Function new出来的。那么ObjectFuntion的关系是怎样的呢?他们两者的原型链可以用下图所示:

image-20231113152935458

下面用代码来验证一下上图中的关系:

console.log(Object.__proto__ === Function.prototype);    //true, 任何函数都可以看作是`Function` `new` 出来的
console.log(Function.__proto__ === Function.prototype);  //true, 任何函数都可以看作是`Function` `new` 出来的console.log(Function instanceof Object);        // true, `Obeject.prototype`是万物原型链的终点
console.log(Object instanceof Object);          // true, `Obeject.prototype`是万物原型链的终点
console.log(Function instanceof Function);      // true, 任何函数都可以看作是`Function` `new` 出来的
console.log(Object instanceof Function);        // true, 任何函数都可以看作是`Function` `new` 出来的

image-20231113153619214

相关文章:

  • Jmeter接口自动化测试 —— Jmeter变量的使用
  • ESP32网络开发实例-使用nlohmann/json库数据解析
  • 手拉手EasyExcel极简实现web上传下载(全栈)
  • 《Linux C编程实战》笔记:文件属性操作函数
  • 【TB作品】51单片机 实物+仿真-电子拔河游戏_亚博 BST-M51
  • 四. 基于环视Camera的BEV感知算法-BEVDet
  • webgpu demo阅读 A-Buffer
  • 什么是NPM,NPM使用方法
  • 优化问题笔记(1)
  • python如何通过自身日志系统读写日志文件
  • 2024测试开发面试题完整版本(附答案)
  • StarCCM+ 导入STL几何模型进行仿真
  • 掌握学习方法——作为开发者最重要的能力
  • go学习redis的学习与使用
  • c++知识总结
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Facebook AccountKit 接入的坑点
  • JavaScript实现分页效果
  • Java方法详解
  • Joomla 2.x, 3.x useful code cheatsheet
  • magento 货币换算
  • Mybatis初体验
  • mysql innodb 索引使用指南
  • python docx文档转html页面
  • SwizzleMethod 黑魔法
  • Vue2.x学习三:事件处理生命周期钩子
  • 猴子数据域名防封接口降低小说被封的风险
  • 利用DataURL技术在网页上显示图片
  • 前端技术周刊 2019-02-11 Serverless
  • 如何用vue打造一个移动端音乐播放器
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 推荐一个React的管理后台框架
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • Java数据解析之JSON
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • #100天计划# 2013年9月29日
  • #define、const、typedef的差别
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (生成器)yield与(迭代器)generator
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)创业家杂志:UCWEB天使第一步
  • ******之网络***——物理***
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .net MVC中使用angularJs刷新页面数据列表
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET6实现破解Modbus poll点表配置文件
  • .net知识和学习方法系列(二十一)CLR-枚举