js继承

作者: 一现_ | 来源:发表于2017-09-24 22:02 被阅读0次

    上个例题:

    var F=function(){};

    Object.prototype.a=function(){};

    Function.prototype .b=function(){};

    var f=new F();

    正确答案: A 

    A  f能取到a,但取不到b

    B  f能取到a,b

    C  F能取到b,不能取到a

    D  F能取到a,不能取到b

    解析:这个问题涉及到js的原型继承

    1.  f.__proto__ === f[的构造函数].prototype === F.prototype

    2.  F.prototype.__proto__ ===  (F.prototype)[的构造函数].prototype ===  Object.prototype (所以a能够 通过f.a访问)

    3. f.constructor === F

    4. F.__proto__ === F[的构造函数].prototype === Function.prototype (所以b可以通过, f.constructor.b访问到)

    注意:

    (F.prototype)[的构造函数] === Object

    F[的构造函数] === Function

    多啰嗦一句( js 的继承靠的是__proto__ ,并不是prototype)

    还有每一个函数的默认原型(即函数的prototype)都是Object的实例

    这句话也就是说函数的prototype._proto_是指向Object.prototype

    建议去看js红皮书的内容

    链接:https://www.nowcoder.com/questionTerminal/8a19cbe657394eeaac2f6ea9b0f6fcf6

    来源:牛客网

    functionTreeNode(x) {

    this.val = x;

    this.left =null;

    this.right =null;

    }

    functionreConstructBinaryTree(pre, vin)

    {

    if(vin.length === 0)

    returnnull;

    varroot = 0, i, j;

    varleft_pre = [], right_pre = [], left_in = [], right_in = [];

    varhead =newTreeNode(pre[0]);

    for(i = 0; i < vin.length; i++){

    if(vin[i] === pre[0]){

    root = i;

    break;

    }

    }

    for(j = 0; j < root; j++){

    left_pre.push(pre[j+1]);

    left_in.push(vin[j]);

    }

    for(j = root + 1; j < vin.length; j++){

    right_pre.push(pre[j]);

    right_in.push(vin[j]);

    }

    head.left = reConstructBinaryTree(left_pre, left_in);

    head.right = reConstructBinaryTree(right_pre, right_in);

    returnhead;

    }

    module.exports = {

    reConstructBinaryTree : reConstructBinaryTree

    };

    相关文章

      网友评论

          本文标题:js继承

          本文链接:https://www.haomeiwen.com/subject/hzfojxtx.html