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

View:new关键词干了什么事,还有原型链是什么

View:new关键词干了什么事,还有原型链是什么

1.new关键词干了什么事:
这里来看一段代码
先创建一个函数,如下:

function myFunction(data) {}
我们现在来用new一个,如下:

const weakMap = new myFunction();
new完了,来打印看看都有什么:

console.log(“1. 开始 new 操作”);
const weakMap = new myFunction();
console.log(“4.”, weakMap, “返回this指向的实例”);
function myFunction(data) {
console.log(“2.”,
this.proto === myFunction.prototype);
console.log(“3.”, this);
}
输出结果是:

那也就是说:

new 操作符做了什么事:

  1. 创建一个空对象

2.挂载连接双方原型,对象的原型是__proto__,构造函数的原型是prototype

3.执行构造函数,将this指向新创建的对象实例

4.如果构造函数返回的是一个对象,则返回这个对象,否则返回this指向的实例

第四点怎么理解呢?你看当上面的代码,我现在没有return,他就是myFunction,现在修改代码,修改为:

function myFunction(data) {
console.log(“2.”,this.proto === myFunction.prototype);
console.log(“3.”, this);
return {
age: 18,
}
}
添加了一个return,并且是个对象时,此时的打印结果:

变了,变成返回的对象了,那返回其他类型呢,例如返回一个字符串:

function myFunction(data) {
console.log(“2.”,this.proto === myFunction.prototype);
console.log(“3.”, this);
return ‘创建对象实例成功’
}
结果是返回的myFunction:

也就是对应上第四条:当构造函数有返回时,并且是个对象时,那返回的就是这个对象,否则就是这个this指向的实例。

2.原型链是什么?
我们知道对象上有个原型叫__proto__,函数上面有个原型叫prototype。根据上面我们知道了new操作符创建了一个空对象并且赋值给了weakMap,那也就是说weakMap.__proto__指向了myFunction.prototype。这个暂且参考上面的第二条。
补充:我们知道在 JavaScript 中,每个函数其实都是一个Function对象。函数默认返回undefined。函数的本质又是对象。
让我们来打印:

// 从weakMap开始分析
console.log(weakMap.proto === myFunction.prototype, “true”);
console.log(typeof myFunction.prototype);
console.log(myFunction.prototype.proto === Object.prototype, “true”);
console.log(typeof Object.prototype,);
console.log(Object.prototype.proto === null, “true”);
console.log("===================================")
//从myFunction开始分析
console.log(myFunction.proto === Function.prototype, “true”);
console.log(typeof Function.prototype);
console.log(Function.prototype.proto === Object.prototype, “true”);
console.log(typeof Object.prototype);
console.log(Object.prototype.proto === null, “true”);
结果是:

总结:

// 实例对象的原型链
weakMap(实例对象)
proto
myFunction.prototype (构造函数的原型对象)
proto
Object.prototype
proto
null

// 构造函数本身的原型链
myFunction(构造函数)
proto
Function.prototype
proto
Object.prototype
proto
null

这就是原型链。

补充:当构造函数返回的是一个对象时,他两的原型并不相等,因为此时weakMap 是函数返回的对象,并不是最初构造的函数。

http://www.dtcms.com/a/434275.html

相关文章:

  • 如何在新的Spring Boot项目中关闭Spring Security?
  • 药企做网站需要哪些手续国内新闻最新消息今天在线
  • 【Flutter】GetX最佳实践与避坑指南
  • AIFoto 1.15.4 | AI图片工具,AI擦除衣服,变性感衣服
  • 数据合规与ISO标准体系
  • 在Ubuntu22.04系统下安装Jellyfin
  • 福州做网站的app排名优化公司
  • 【Linux系统】快速入门一些常用的基础指令
  • AI自动化测试:接口测试全流程自动化的实现方法——从需求到落地的全链路实践
  • 打开网站建设中是什么意思表白网站制作代码
  • 【MySQL】MVCC:从核心原理到幻读解决方案
  • Unity游戏基础-4(人物移动、相机移动、UI事件处理 代码详解)
  • 神经网络中优化器的作用
  • 电子商务网站建设的流程图什么是软文
  • 【代码管理】git使用指南(新手向)
  • 【大模型】Agent之:从Prompt到Context的演进之路
  • Docker 搭建 Nginx 并启用 HTTPS 具体部署流程
  • 【代码随想录day 34】 力扣 62.不同路径
  • 点击app图标进入网站怎么做小程序软件开发制作
  • 【Rust GUI开发入门】编写一个本地音乐播放器(15. 记录运行日志)
  • Rust模式匹配详解
  • 石家庄做网站建设公司安徽省建设厅网站职称申报
  • gitlab-runner 再次实践中理解和学习
  • C++之stack等容器适配器(上)实战篇
  • JavaWeb零基础学习Day1——HTMLCSS
  • Starting again-01
  • 如何做网站链接使用朝阳seo建站
  • Nivo 用React打造精美数据可视化的开源利器
  • 【iOS安全】iPhone X iOS 16.7.11 (20H360) Palera1n MacOS版 越狱教程
  • 【连载4】数据库热点更新场景调优策略