zoukankan      html  css  js  c++  java
  • 理解原型2

    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 函数进行实例化。

    1. 类做typeof运算时,返回的是Function类型
    2. 然后就是实例的constructor,在上一篇笔记《理解原型》中就提到
    //在浏览器的控制台输入
    o.constructor === o.__proto__.constructor;  //true
    

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

    //在浏览器的控制台输入
    o.prototype === o.__proto__;        //true
    
    1. 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
    

    image
    区分objectObject,前者是指类型为对象,是区别于原始值的引用值,后者Object是集合引用类型

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

    每个 JavaScript 函数实际上都是一个 Function 对象。运行 (function(){}).constructor === Function // true 便可以得到这个结论。

    JavaScript标准内置对象--MDN Web Docs

    关于typeof

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

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

    感谢阅读!

  • 相关阅读:
    Servlet的生命周期及工作原理
    抓包---firebug
    firebug抓包
    token认证来龙去脉
    性能测试报告注意事项
    性能测试报告
    Error -26601解决办法
    lr新手误区
    css定位
    xpath定位
  • 原文地址:https://www.cnblogs.com/liulangbxc/p/14675882.html
Copyright © 2011-2022 走看看