js中new操作符

1.什么是new?

在JS中,new的作用是通过构造函数来创建一个实例对象(和普通函数不一样,当函数用作构造函数时,首字母一般要大写)

function Foo(name) {this.name = name;
}
console.log("new Foo('mm')的类型:",typeof new Foo('mm')); // object
console.log("Foo的类型:",typeof Foo); // function

 2.new经历了什么过程?

Foo明明只是一个函数,可是为什么new Foo()执行后会突然返回一个对象呢?
我们从结果出发可以推断出,既然返回了一个对象,那么这事肯定和对象有关系。

实际上new帮我们做了这样几件事:

  1. 帮我们创建了一个空对象,例如:obj;
  2. 将空对象原型的内存地址__proto__指向函数的原型对象;
  3. 利用函数的call方法,将原本指向window的绑定对象this指向了obj。(这样一来,当我们向函数中再传递实参时,对象的属性就会被挂载到obj上。)
  4. 利用函数返回对象obj。

3.new的过程分析

function Foo(name) { 
this.name = name; return this; 
} 
var obj = {}; 
obj.__proto__ = Foo.prototype; // Foo.call(obj, 'mm');var foo = Foo.call(obj, 'mm');console.log(foo);

 

分析:
首先预编译,声明提升,解释执行。
执行时按照顺序来进行,

  • obj指向空对象;
  • obj的原型地址指向构造函数Foo的原型对象;
  • 执行Foo.call(obj, 'mm');
    • this.name = name; 通过函数的call方法将this绑定到obj(也就是说this就是obj),实参mm传入构造函数Foo中,这样this.name = 'mm',那么obj.name = 'mm',也就是说name属性被挂载到obj对象上。
    • return this; 就是return obj,这样obj这个对象就被返回出来了。
  • 将结果赋值给变量foo。
  • 打印结果。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

charles 安装 ssl_「从零开始Python爬虫」1.7.1 Charles的安装与配置

Charles的安装Charles是一个网络抓包工具,相比Fiddler,其功能更为强大,而且跨平台支持得更好,所以这里选用它来作为主要的移动端抓包工具。相关链接官方网站:https://www.charlesproxy.com下载链接:https:/…

Git创建本地分支并提交到远程仓库

1.建立本地仓库 查看当前项目根目录中有没有 .git文件(隐藏文件),如果没有,右键->Git bash here ,然后输入命令git init建立本地仓库 git init 2.将代码提交到本地仓库 git add git commit -m "new branch…

python删除一个文件_Python 实现一个小功能: 删除某路径下文件及文件夹的脚本...

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。 编程之家小编现在分享给大家,也给大家做个参考。 #!/usr/bin/env python import os import shutil delList [] delDir "/home/test" delList os.listdir(delDir ) for f in delList: filePath o…

uniapp防抖操作

1.新建common文件并创建common.js文件 // 防止处理多次点击function noMultipleClicks(methods, info) {// methods是需要点击后需要执行的函数, info是点击需要传的参数let that this;if (that.noClick) {// 第一次点击that.noClick false;if(info && inf…

JS去除字符串去除最后的逗号

let str"1,2,3,"str str.substring(0, str.lastIndexOf(,));

一个div 上下两行_web前端工程师如何理解 CSS 布局和块级格式化上下文

CSS是web前端中的重要内容,很多初学者在学习CSS时都会遇到各种各样的问题,今天就给大家分享web前端开发如何理解CSS不惧和块级格式化上下文。也许你从未听说过这个术语,但是如果你曾经用 CSS 做过布局,那么你也许知道它是什么。理…

什么函数是回调函数?

1.什么函数是回调函数? 1.你定义得 2.你没有调用 3.它最终执行了 2.常见的回调函数 1.dom事件操作函数 2.ajax请求回调函数 3.定时器回调函数 ......

html转word 图片丢失 java_Java 设置 Word 文档中图片文字环绕方式

在Word文档中插入图片时,选择合理的图片文字环绕方式可以使图片的展示效果更好,也能使页面的排版更加美观。本文就将介绍如何使用Free Spire.Doc for Java 添加图片到Word文档并设置图片的大小及文字环绕方式。Jar包导入方法一:下载Free Spir…

c语言getchar_二级C语言试题刷题录

2020.9 计算机二级C语言科目选择题标黑的为正确选项程序流程图中带有箭头的线段表示的是控制流 图元关系、数据流、调用关系当图为数据流图的时候,标有名字的箭头表示数据流结构化程序设计的基本原则不包括多态性 自顶向下、模块化、逐步求精软件设计中模块划分应遵…

构造函数和实例化原理

(1)构造函数内部原理 1、在函数体最前面隐式的加上this {};2、执行 this.xxx xxx;3、隐式的返回this (2)实例化原理 new关键字实例化对象,改变this指向,由window到实例化出的对象本身 (3&am…

python里自带的绘画库是_Python绘图Turtle库详解

Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图…

Git各指令的本质

前言 作为当前世界上最强大的代码管理工具Git相信大家都很熟悉,但据我所知有很大一批人停留在clone、commit、pull、push...的阶段,是不是对rebase心里没底只敢用merge?碰见版本回退就抓瞎?别问我怎么知道的,问就是&a…

python re模块详解_python 详解re模块

本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例。本文的内容不包括如何编写高效的正则表达式、如何优化正则表达式,这些主题请查看其他教程。 注意:本文基于Python2.4完成&#xf…

cass或cad里提取点坐标及高程的插件_一个坐标计算小程序 EXCEL 可以进行抵偿任意带高斯坐标转换...

永久下载:https://www.celiang.net/article/688【1】史上最齐全的CAD下载资源!!!【2】【BIM软件】Revit 2018软件安装包免费送,内附安装教程!【3】南方CASS展点方法视频教程【4】坐标转换中的七参数详谈&am…

一个java文件里面可以写多少个class

一个java文件里面可以有多个类,但是public修饰的类只能有一个。public类的名称必须完全与含有该编译单元的文件名相同,包含大小写。如果不匹配,同样将得到编译错误。一个java文件里里面可以没有public修饰的类,这时候文件名也就随…

exe解包和重新打包_Jira 批量提交问题 + 生成可执行文件exe

本地环境 Python 3.7.1 windows 10 x64一 jira 批量提交1 脚本思路(1) 待提交问题存储:csv (习惯用 csv ,其他如excel 理论上也可以)(2) 使用 jira 库的方法 create_issue(3) 已提交问题存储到另一个 csv 文件里(用于后续操作,如统一更新状态…

Mybatis-puls打印sql语句

在配置文件中直接添加 mybatis-plus.configuration.logimplorg.apache.ibatis.logging.stdout.StdOutImpl

python统计输入学生的总分和平均分_C输入函数和成绩显示函数并计算每位同学总分和平均分对成绩排名输出.doc...

《C程序设计》测试题 Luozhengchun 编写C程序完成某班学生考试成绩的统计管理,包括成绩的输入函数和成绩显示函数,并计算每位同学的总分和平均分,对成绩排名输出。 #include /*标准输入、输出函数库*/ #include /*字符串处理函数库*/ #includ…

JDBC进行事务管理

事务的四个特征: 原子性 : 是指事务中包含的操作都被看做是一个逻辑单元 一致性: 开始前和结束后数据库都处于一致性状态 隔离性: 对数据库修改的多个事务是彼此隔离的 持久性: 事务完成之后对系统的影响是永久的