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

【译】理解JavaScript:new 关键字

由于存在海量的库和工具,以及各种各样简化你开发的玩意儿,很多程序员开始在不深入了解底层的情况下开发应用。JavaScript就是这种现象的代言人。JavaScript作为一种最复杂的且流传最广泛的语言,很多的开发者被高层次库的使用吸引,同时将糟粕抽离。

尽管你在不深入理解的情况下仍可以开发值得称道的应用,但深入JavaScript绝对让你收益。对“怪异部分”的理解可以让高级开发者在芸芸众生中脱颖而出,另外,虽然JS的生态日新月异,但对“怪异部分”的理解依旧是所有其他工具的基础。理解了这些就会拓展你的视野,并且改变你看待开发过程的方式。

在我 之前的文章 中稍微提到过new关键字,它创建了一个对this的绑定。在面向对象语言中,new关键字总是用于实例化一个类。

var dog = new Dog();

原理是类的构造函数被调用,并且实例化了新的对象。尽管JavaScript的语法非常相同,但使用new在底层还是会引发不同行为

没有构造函数

首先,我们并不是必须要用一个类来生成对象。在JavaScript中我们可以用方法(function)就能实现此目标。构造函数只不过是在调用时new关键字放在其前面的普通方法而已。你可以说没有构造函数-只有构造函数调用,因为实际上所有的函数都可以被调用去创建对象。这并不是对象或者类或者任何特殊定义方式的一部分。

这里有几个构造函数调用经历的步骤,但我们只关注现在讨论的事项:

1.一个新对象被创建

2.this被绑定到新对象上面

3.除非函数返回它自己的对象,否则调用将返回已构造的对象

function Person(name) {
    this.name = name
}

var person = new Person("Alex")
console.log(person.name) // Alex

总结

总结一下,这并不是一个难懂的概念。要点就是要始终记得,任何方法(function)都可以像构造函数一样被调用,并且会创建一个this的绑定。

非常感谢阅读,期待你的反馈。

相关文章:

  • 开发者论坛一周精粹(第四十三期) 物联网全栈教程 ECSphp版本降级
  • Waymo宣布今年在凤凰城推出自动驾驶汽车打车服务,此前已获得商业执照
  • 数学随记—公式定理
  • docker操作使用
  • 【枚举】【贪心】Codeforces Round #482 (Div. 2) B. Treasure Hunt
  • Python学习笔记__6.3章 继承和多态
  • 如何高效的编写与同步博客 (.NET Core 小工具实现)
  • Mongodb对集合(表)和数据的CRUD操作
  • (2)Java 简介
  • innobackupex 在增量的基础上增量备份
  • elasticsearch+logstash+kibana+redis
  • 有向无环图(DAG)的最小路径覆盖
  • winSCP:无权访问
  • VS Code 折腾记 - (13) VS Live Share (可提高效率的代码实时协作插件)的使用姿势
  • 百度Api完成在线地图定位显示
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • CentOS7 安装JDK
  • Flex布局到底解决了什么问题
  • Golang-长连接-状态推送
  • k8s 面向应用开发者的基础命令
  • Laravel5.4 Queues队列学习
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • PhantomJS 安装
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • 产品三维模型在线预览
  • 缓存与缓冲
  • 坑!为什么View.startAnimation不起作用?
  • 力扣(LeetCode)21
  • 七牛云假注销小指南
  • 前言-如何学习区块链
  • 如何解决微信端直接跳WAP端
  • 深入 Nginx 之配置篇
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 手写双向链表LinkedList的几个常用功能
  • 数据结构java版之冒泡排序及优化
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 学习Vue.js的五个小例子
  • 以太坊客户端Geth命令参数详解
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (1)Nginx简介和安装教程
  • (C语言)球球大作战
  • (poj1.2.1)1970(筛选法模拟)
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (六)c52学习之旅-独立按键
  • (六)激光线扫描-三维重建
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (五)网络优化与超参数选择--九五小庞
  • (转)关于多人操作数据的处理策略
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!