关于javascript:理解原型2

35次阅读

共计 1372 个字符,预计需要花费 4 分钟才能阅读完成。

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

class Person{constructor(){this.name = "jack";}
}

var o = new Person();
typeof Person;     //Function
o.constructor === Person;     //true
o 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

正文完
 0