《JavaScript 核心原理解析》学习笔记 Day 14 new 构造器

        在 JavaScript 中构造器是动态的逻辑。

        最早的 JavaScript 没有继承。JavaScript 1.0 中可以将函数作为构造器,并且在函数中向它的实例(也就是 this 对象)抄写类声明的那些属性。构造器函数即为类,而被创建出来的实例即为对象。JavaScript 一方面使用了类继承的基础结构和概念,另一方面又要实现原型继承和基于原型链检查的逻辑。instanceof 运算被实现为一个动态地访问原型链的过程,它将从对象所属类的 prototype 属性逆向地在原型链中查找指定的原型,因此能确定某个对象是否是某个类本身或其子类的实例。

        在 ECMAScript 6 之前,JavaScript 中的函数、类和构造器这三个概念是混用的。一般来说,它们都被统一为函数 X() 这个基础概念,而当它用作 x = new X() 这样的运算,或从 x.constructor 这样的属性中读取时,它被理解为构造器;当它用作 x instanceof X 这样的运算,或者讨论 OOP(面向对象程序设计)的继承关系时,它被理解为类。

        从 ECMAScript 6 开始,JavaScript 有了使用class来声明类的语法。自此之后,JavaScript 的类与函数有了明确的区别:类只能用 new 运算来创建,而不能使用 () 来作为函数调用。如果尝试将 ES6 的类作为函数调用,那么 JavaScript 就会抛出一个异常:Class constructor XClass cannot be invoked without 'new'。并且在 JavaScript 内部明确区分了方法与函数:不能对方法进行 new 运算。如果尝试对方法进行 new 运算,JavaScript 也会抛一个异常:obj.fun is not a constructor。

        所以,在 ECMAScript 6 之后,函数可以简单地分为三个大类:

        1. 类:只可以进行 new 运算;

        2. 方法:只可以进行调用 () 运算;

        3. 一般函数:(除部分函数有特殊限制外)同时可以进行 new 和调用运算。

----- 极客时间《JavaScript 核心原理解析》学习笔记 Day 14 ----- 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值