ES6引入了类的概念,但其实底子里还是原型那一套。
以类Person为例:

class Person{    constructor(){        this.name = "jack";    }}var o = new Person();typeof Person;     //Functiono.constructor === Person;     //trueo instanceOf Person;        //true
  1. 类有一个构造函数,new Person()时,实则是调用该构造函数

    应用 new 操作符实例化 Person 的操作等于应用 new 调用其构造函数。惟一可感知的不同之处就 是,JavaScript 解释器晓得应用 new 和类意味着应该应用 constructor 函数进行实例化。
  2. 类做typeof运算时,返回的是Function类型
  3. 而后就是实例的constructor,在上一篇笔记《了解原型》中就提到

    //在浏览器的控制台输出o.constructor === o.__proto__.constructor;  //true

    Person的prototype指向原型,实例o的[[prototype]]也是

    //在浏览器的控制台输出o.prototype === o.__proto__;        //true
  4. o instanceOf Person返回true,Person在上下文中是function类型,而在原型链继承中,原型也能够是一个实例,那么原型到底是什么?

    答:首先原型是一个对象。对象被认为是某个特定援用类型的实例。新对象通过应用 new 操作符后跟一个构造函数(constructor) 来创立。构造函数就是用来创立新对象的函数。常见对象按类型分有两类:根本援用类型,汇合援用类型。根本援用类型:Date,RegExp,原始值包装类型(Boolean,Number,String),单例内置对象(Global,Math)等汇合援用类型:Object、Array等其中属于根本对象的则是:Object、Function、Boolean、Symbol      //MDN的说法所以Person作为Function的一个实例,是一个对象,能够作为原型。例子中的原型链是这样的:o--->Person(Function)--->匿名对象(Object)--->null


    辨别objectObject,前者是指类型为对象,是区别于原始值的援用值,后者Object是汇合援用类型

ECMA-262 将对象定义为一组属性的无序汇合。严格来说,这意味着对象就是一组没有特定程序的 值。对象的每个属性或办法都由一个名称来标识,这个名称映射到一个值。正因为如此(以及其余还未 探讨的起因),能够把 ECMAScript 的对象设想成一张散列表,其中的内容就是一组名/值对,值能够是 数据或者函数。

每个 JavaScript 函数实际上都是一个 Function 对象。运行 (function(){}).constructor === Function // true 便能够失去这个论断。

JavaScript规范内置对象--MDN Web Docs

对于typeof

typeof是一个运算符而不是函数,用于判断根本类型(具体是哪种原始值)和各种援用类型(以object概括),返回值是字符串,可能的返回后果如下:

根本类型:undefined、null、number、boolean、string、symbol