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

JS中new的过程发生了什么

一、JS中new的过程发生了什么?

从例子看方法

function WhatNew(name){this.name = name
}
let news = new WhatNew('屈小康')

通过简单的构造模型创建对象。在说这个之前你需要了解,prototype和__proto__.
prototype属性:每一个构造函数(function a())都有一个prototype属性,它指向构造函数的指针(constructor)。
而__proto__这个方法是每个对象都包含的一个方法,它也指向(constructor)

	WhatNew.prototype === news.__proto__ // true

我们都知道对象的继承是通过原型链的,而原型链就是通过__proto__一层一层网往上找而形成原型链的,找到最后找到null。
我们直接为构造函数添加一个原型方法。

	WhatNew.prototype.add = function(x,y){return x + y 
}
news.add(1,2)

news的查找过程,现在自己的原型上查找,找不到再向他的上一层构造函数的原型上找,如果还是没有找到的话,往Object上找,找不到的话返回null

news.__proto__.__proto__.proto__ == null

Object所以对象的实例,比如我们用的一些对象的方法,虽然你定义了,但是没有用。那就是因为继承了Object的原因。比如toString的等

news.toString() // "[Object Object]"

在这里插入图片描述
接下来说明new的过程发生了那些事情:
1、new先创建一个新的对象

var news = new Object()

2、 我们将这个空对象的proto成员指向whatnew函数的对象prototype成员对象。

news.proto = whatnew.prototype

3、修改whatnew的this到object上面。
4、通过call(obj) 改变this指向
5、最后吧whatnew 返回给news就可以了

2、自己实现一个new方法
	function Mynew(fun, ...arg){let obj = { //定义一个空对象__proto__ : fun.prototype // 该空对象的__proto__指向fun.prototype}fun.apply(obj,arg) //改变this指向objreturn obj}function person (age , name){this.age = agethis.name = name }let mynew = Mynew(person,'1','2')

这样就实现了一个new的方法。

在这里插入图片描述

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

相关文章:

  • 系统白名单接口添加自定义验证(模仿oauth2.0),防安全扫描不通过
  • 校园服装网站建设预算手机软件应用市场
  • 【AI论文】ExGRPO:从经验中学习进行推理
  • 连接两个世界:QIR——量子-经典混合计算的编译器桥梁
  • 怎样制作网页链接教程狼雨seo教程
  • 第1章:初识Linux系统——连接网络NAT模式
  • CSS3 动画:从入门到精通
  • 在JavaScript / HTML中,所有转义字符(字符实体)
  • shopnc本地生活o2o网站源码网站开发软件怎么做
  • Vue3+socket.io 项目本地vite配置
  • wangEditor
  • Unity网络开发--超文本传输协议Http(1)
  • 从“用框架”到“控系统”——数据流、事件流、接口边界是如何形成的;
  • 有没有什么网站做泰国的东西做网站排名软件
  • 达梦数据库逻辑备份与还原
  • 如何解决Redis和数据库的一致性问题?
  • 新版saas餐饮外卖小程序源码/微信/支付宝/抖音/扫码点餐/DIY装修/美团代付/全开源
  • react 修复403页面无法在首页跳转问题
  • 学子网站建设郑州门户网站建设哪家好
  • 新乡网站优化公司看市场行情用什么软件
  • SQL注入原理与方法
  • 如何将Vue 项目转换为 Android App(使用Capacitor)
  • 输出端口原理图分析
  • 响应式网站建设有利于seo常熟做网站公司
  • php购物网站开发设计免费网站软件app
  • CTF攻防世界WEB精选基础入门:disabled_button
  • 昂瑞微:引领射频前端国产化浪潮,铸就5G时代核心竞争力
  • 基于SpringBoot的高校教师科研项目信息管理系统
  • 富文本返回的Html数据格式化
  • 昂瑞微冲刺科创板:创新驱动,引领射频芯片国产化新征程