原型链

作者: 爱上帘外修竹 | 来源:发表于2016-08-01 08:58 被阅读0次

    问答

    1. 有如下代码,解释

    Person
    prototype
    __proto__
    p
    constructor
    之间的关联。

    function Person(name){
     this.name = name;
    }
    Person.prototype.sayName = function(){
      console.log('My name is :' + this.name);
    }
    var p = new Person("若愚")
    p.sayName();
    

    Person:p的构造函数,自己本身也是对象,其原型是Person.prototype
    prototype:Person和p的原型
    __proto__:每个对象都会有的一个属性,指向其原型对象(Object.prototype除外)
    p:由构造函数Person所生成的对象
    constructor:Person的原型对象所具有的一个属性,指向Person

    2. 上例中,对对象 p可以这样调用 p.toString()。toString是哪里来的? 画出原型图?并解释什么是原型链。

    toString来自Object的原型对象

    如上图所示,使用者想调用p.toString()方法,但对象p并没有,于是向p的原型p.prototye找,原型中没有,继续向上一级原型对象找,最终找到了Object.prototype中的toString()方法。Object的原型对象Object.toString已经没有原型对象了。

    3. 对String做扩展,实现如下方式获取字符串中频率最高的字符
    String.prototype.getMostOften=function(){
        var arr = {},
            max = 0,
            num = 0;
        for(var i=0;i<this.length;i++){
            if(arr[this[i]]){
                arr[this[i]] ++ ;
            }else{
                arr[this[i]] = 1;
            }
        }
        for(var key in arr){
            if(max<arr[key]){
                max = arr[key];
                num = key;
            }
        }
        return "出现最多的字母:" + num + "\n" +  "出现次数:" + max;
    }
    var str = 'ahbbccdeddddfg';
    var ch = str.getMostOften();
    console.log(ch); //d , 因为d 出现了5次
    
    4. instanceOf有什么作用?内部逻辑是如何实现的?

    判断一个对象是否是某个对象的实例
    p1 instanceOf p //true or false

    function isInstanceOf(obj,func){
        var __proto__ = __proto__.__proto__
        do{
            if(obj.__proto__ == func.prototype){return true;}
            if(!__proto__){return false;}
        }while(__proto__ = __proto__.__proto__)
    };
    

    本文版权归本人(帘外修竹),转载须说明来源

    相关文章

      网友评论

          本文标题:原型链

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