new一个实例
// es5
const Lijianhua = function () {this.lastname = 'li'this.firstname = 'jianhua'
}
Lijianhua.prototype.say = function () {console.log('hi')
}
const her = new Lijianhua()
her.say()
// es6 是es5的语法糖
class Lijianhua {constructor () {this.lastname = 'li'this.firstname = 'jianhua'}say () {console.log('hi')}
}
const her = new Lijianhua()
her.say()
new操作中发生了什么?

new 一个对象过程中,主要发生了以下步骤:

  1. 以构造器的prototype属性为原型,创造一个新的、空的对象
  2. 将它的引用赋给构造器的 this,同时将参数传到构造器中执行
  3. 如果构造器没有手动返回对象,则返回第一步创建的新对象,如果有,则舍弃掉第一步创建的新对象,返回手动return的对象。
实现一个new方法
class Lijianhua {constructor () {this.lastname = 'li'this.firstname = 'jianhua'}say () {console.log('hi')}
}// 自己定义的new方法
const newMethod = function (Parent, ...rest) {// 1.以构造器的prototype属性为原型,创建新对象;const child = Object.create(Parent.prototype)// 2.将this和调用参数传给构造器执行const result = Parent.apply(child, rest)// 3.如果构造器没有手动返回对象,则返回第一步的对象return typeof result === 'object' ? result : child
}
// 创建实例,将构造函数Parent与形参作为参数传入
const her = newMethod(Lijianhua)
her.say() // 'hi';
console.log(her instanceof Lijianhua) // true

参考:https://www.cnblogs.com/echolun/p/10903290.html

请问JS中new 一个对象发生了什么相关推荐

  1. JS 中判断一个对象是否为数组对象?

    在面向对象中 判断一个对象中 判断一个对象是否为数组 1 可以查找它的原型 (__proto__) 是否为数组对象的原型对象 var arr1 = [1,2,3];console.log(arr1._ ...

  2. js中判断一个对象是否存在

    一.Boolean()方法 用Boolean()方法可以将Js中的任意数据类型转为布尔值: 二.用于判断xx是否存在 js一般会自动执行Boolean()方法,我们可以借此判断某个对象在js当前的执行 ...

  3. 【Javascript高级知识】深入剖析JS中New一个对象的过程(实现原理)

    new一个对象的原理是怎样的呢? 用new Object() 的方式新建了一个对象 obj 取出第一个参数,就是我们要传入的构造函数.此外因为 shift 会修改原数组,所以 arguments 会被 ...

  4. js中取一个对象的部分属性

    let obj = { a: 1, b: 2, c: 3, d: 4, e: 5, - }; 有时候对于这样的一个对象,我们只想获得其中的部分属性,有什么好方法呢? 一.delete方法 let ob ...

  5. JS中给一个对象动态追加key

    var data = {}; data['key1'] = "哈哈哈"; var variable = 'key2'; data[variable] = "嘿嘿嘿&quo ...

  6. js中关于Blob对象的介绍与使用

    js中关于Blob对象的介绍与使用 blob对象介绍 一个 Blob对象表示一个不可变的, 原始数据的类似文件对象.Blob表示的数据不一定是一个JavaScript原生格式 blob对象本质上是js ...

  7. 简单聊聊js中的内置对象

    文章目录 一.Map对象 1.常用属性和方法 2.示例 二.Set 1.属性和方法 2.示例 三.Date对象 1.创建Date对象 1.1.*new Date() ;* 2.2.*new Date( ...

  8. JS中的THIS处理及正则表达式 — 2、综合实战:华为商城产品排序

    1.整体页面结构 需要用到ajax.json处理.es6模板字符串拼接.sort排序原理.升降序切换(涉及到很多编程思想编程技巧) 目录 2.AJAX获取数据和ES6模板字符串拼接 index.js ...

  9. 在js中如何判断一个对象是否为空

    网上已经有很多的回答了分别是 for in (jquery中就是这么实现的) for of JSON.stringify() == '{}' Object.getOwnPropertyNames() ...

最新文章

  1. java并发读取相同的文件_高效读取大文件,再也不用担心 OOM 了!
  2. python 提交表单登录不成功_Python http requests模拟登录与提交表单的实现问题
  3. FTPHelper-FTP帮助类,常用操作方法
  4. 【翻译】CodeMix使用教程(三):Emmet
  5. 第一章——数据结构之绪论
  6. 【推荐】最全的积分墙基础知识大全:积分墙渠道运营那些事儿
  7. 看这玩意复习你还会挂科?《网络原理篇》
  8. 快递扫地机器人被损坏_手机动一动,全屋扫干净:石头T4扫地机器人体验记
  9. 解决outlook无法启动
  10. vscode运行html的插件_vscode前端常用插件推荐,搭建JQuery、Vue等开发环境
  11. 蒙文字体怎么安装_我们来聊一聊iOS13的“字体”该怎么用?
  12. 避免内存泄露及内存的规范化使用
  13. 通过python和websocket构建实时通信系统[扩展saltstack监控]
  14. Java程序发生异常就挂了吗?
  15. 关于CMOS摄像头的DVP接口的工作方式与一般使用方法
  16. 使用selenium模拟登录QQ空间
  17. 计算机无法自动矫正时间,怎么设置电脑上的时间自动同步进行校正
  18. 龙芯3A3000 PCI 硬件问题
  19. canvas实现粒子跟随鼠标动画
  20. 前端可以做的SEO搜索引擎优化(摘取)

热门文章

  1. 论文阅读:EMPIRICAL ANALYSIS OF UNLABELED ENTITY PROBLEM IN NAMED ENTITY RECOGNITION
  2. 绝地求生服务器不稳定奖励,绝地求生间歇性掉帧 几个小窍门轻松解决
  3. Nginx配置http和https
  4. edge浏览器打不开,有网络能正常上网,但是edge浏览器无法浏览
  5. 基于javaweb的茶叶溯源系统(java+ssm+jsp+bootstrap+layui+mysql)
  6. Mysql安装配置详解
  7. 直流无刷电机开环调速基于STM32F302R8+X-NUCLEO-IHM07M1(一)
  8. html 字体思源_css设置文字思源雅黑,分为medium, regular, light
  9. 关于iPhone系统statusbar
  10. vivox23android系统耗电25,vivox23有哪些省电方法?