原型链

作者: 块垒 | 来源:发表于2016-10-08 19:41 被阅读63次

    有如下代码,解释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是一个函数,本身也是一个对象,拥有prototype属性,而prototype拥有constructor、__proto__两个对象成员。p是由构造函数方法创造的对象,其本身也具有__proto__属性,该属性指向prototype对象。

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

    原型链
    每一个对象都有一个__proto__属性,这个属性指向该对象的原型对象,而原型对象也有一个__proto__指向自己的原型对象,这种关系一直到Object对象结束。

    对String做扩展,实现如下方式获取字符串中频率最高的字符

    var str = 'ahbbccdeddddfg';
    var ch = str.getMostOften();
    console.log(ch); //d , 因为d 出现了5次
    
    var str = 'ahbbccdeddddfg';
    String.prototype.getMostOften=function(){
      var times={};
      for(var i=0;i<this.length;i++){
        if(!times[this.charAt(i)]){
          times[this.charAt(i)]=1;
        }else{
          times[this.charAt(i)]++;
        }
      }
      var num=0;
      var word;
      for(var key in times){
        if(times[key]>num){
          num=times[key];
          word=key;
        }
      }
      return word;
    };
    var ch = str.getMostOften();
    console.log(ch); //d , 因为d 出现了5次
    

    JSBin

    instanceOf有什么作用?内部逻辑是如何实现的?

    instanceof运算符用来测试一个对象在其原型链构造函数上是否具有prototype属性

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

    相关文章

      网友评论

        本文标题:原型链

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