• 一次面试


    继承

    继承?
    -.-

    为神马要继承?
    算法优化,语法概念,底层'架构'...
    实例对象的共享优化,通过指针的方式,减少内存开支

    prototype

    prototype什么鬼?
    菊花链

    有什么作用?
    js继承的实现依赖
    函数通过prototype获取到公共的属性/方法,以达到继承的目的

    so?
    js的继承通过prototype的指向直接增加一层(菊花链),不在进行其他优化,在创建对象时,需要对该链不断的进行循环查找,直到找到

    constructor

    constructor什么鬼,函数本身不就是构造函数吗?
    构造函数,prototype只是静态的菊花链,函数本身是构造函数,而constructor是构造函数的指向
    理论上是自动产生,不应该被修改的,创建对象语法不健全下,可以被修改
    单纯的识别属性,可以想到,好的api都会提供很全面的属性
    (java有道题,如何获取祖宗属性,如何获取构造函数,在js中,这都不是事)

    __proto__

    __proto__是神马?
    构造该对象的原型(当前对象的原型)
    通过构造函数创建出来的实例,均包含此属性

    为什么是该对象的原型?
    function A(){}
    A.prototype.a=1;
    A.prototype.click=function(){console.log(1)};
    var a=new A();
    console.log(a.__proto__===A.prototype)//true

    function B(){}
    B.prototype=new A();
    var b=new B()

    console.log(b.__proto__===B.prototype)//true

    a上的prototype是什么?
    函数才有prototype属性,也才有继承的意义
    通过构造函数创建出来的a,没有prototype

    所以构造函数出来的对象一定没有prototype,那为什么还要用__proto__代替?
    function A(){
    return function(){}
    }
    var a=new A();
    console.log(a.prototype);
    console.log(a.__proto__);
    构造函数不完善(或者说基于万物皆对象的准则),通过构造函数创建出的对象也可能包含prototype,
    所以__proto__的意义并不能被替代
    换言之,__proto__是实例的菊花链
    prototype是函数的菊花链


    低版本ie下没有__proto__?
    非标准,且暴露危险

    chrome下为什么有?
    ued,方便程序猿通过实例查看继承关系,且改了也没用

    而且es6对其有了明确的定义
    __proto__属性,用来读取或设置当前对象的prototype对象。只有浏览器需要实现这个属性

    抑郁了,早知道写博文,直接把地址丢面试官脸上的

  • 相关阅读:
    VMI
    jsp环境搭建(Windows)
    128M小内存VPS优化与typecho环境搭建
    Shell字符串
    bash和sh区别
    PHPDocument 代码注释规范总结
    PHP 程序员的技术成长规划
    JavaScript:JSON
    mongoDB 使用手册
    PHP面向对象的标准
  • 原文地址:https://www.cnblogs.com/liuCy/p/4924108.html
Copyright © 2020-2023  润新知