当前位置: 首页 > 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完成在线地图定位显示
  • 深入了解以太坊
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 〔开发系列〕一次关于小程序开发的深度总结
  • Apache Pulsar 2.1 重磅发布
  • Apache Spark Streaming 使用实例
  • echarts的各种常用效果展示
  • Mocha测试初探
  • php中curl和soap方式请求服务超时问题
  • Redis 懒删除(lazy free)简史
  • Redis中的lru算法实现
  • vagrant 添加本地 box 安装 laravel homestead
  • vue 配置sass、scss全局变量
  • 测试开发系类之接口自动化测试
  • 代理模式
  • 高度不固定时垂直居中
  • 构建二叉树进行数值数组的去重及优化
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 关于使用markdown的方法(引自CSDN教程)
  • 关于字符编码你应该知道的事情
  • 后端_ThinkPHP5
  • 机器学习 vs. 深度学习
  • 基于axios的vue插件,让http请求更简单
  • 记录:CentOS7.2配置LNMP环境记录
  • 看域名解析域名安全对SEO的影响
  • 来,膜拜下android roadmap,强大的执行力
  • 如何实现 font-size 的响应式
  • 小程序 setData 学问多
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • (HAL库版)freeRTOS移植STMF103
  • (Oracle)SQL优化技巧(一):分页查询
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (四) 虚拟摄像头vivi体验
  • (推荐)叮当——中文语音对话机器人
  • (转) 深度模型优化性能 调参
  • (转)LINQ之路
  • (转)我也是一只IT小小鸟
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据