zoukankan      html  css  js  c++  java
  • 一次面试

    继承

    继承?
    -.-

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

    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对象。只有浏览器需要实现这个属性

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

  • 相关阅读:
    HDU 1102 Constructing Roads
    HDU 1285 确定比赛名次。
    最小生成树 HDU 各种畅通工程的题,prim和kru的模板题
    HDU Jungle Roads 1301 最小生成树、
    并查集小结(转)
    HDU hdu 2094 产生冠军 拓扑排序 判定环
    模运算(转)
    拓扑排序(主要是确定环和加法) HDU 2647 Reward
    HDU 1372 Knight Moves 简单BFS
    用计算机模型浅析人与人之间沟通方式 (一)如何谈话
  • 原文地址:https://www.cnblogs.com/liuCy/p/4924108.html
Copyright © 2011-2022 走看看