美文网首页@IT·互联网
JavaScript的原型链相关问题

JavaScript的原型链相关问题

作者: 柏龙 | 来源:发表于2017-05-09 23:57 被阅读0次

    问题1:有如下代码,解释Personprototype__proto__pconstructor之间的关联。

    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 是构造函数内部的原型对象 指向 Person.prototype
    __proto__p new 出来的一个对象,对象的__proto__ 指向 Person.prototype
    constructor 指向Person

    Person.png

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

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

    toString() 从原型链上得来
    首先 p.toString方法,会在自己属性上查找,如果没有找到会沿着__proto__属性继续到构造函数Person.prototype里找toString方法,如果还未找到,再继续往Person.prototype__proto__最后找到toString()方法。

    toString.png

    原型链:
    每个构造函数和对象都有一个隐藏的__proto__属性,当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype里没找到的话,又会在自己的__proto__找,于是就这样一直找下去,这样就组成了一条链,这个就是原型链。

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

    var str = 'ahbbccdeddddfg';
    var ch = str.getMostOften();
    console.log(ch); //d , 因为d 出现了5次
    
    var str = 'ahbbccdeddddfg';
    String.prototype.getMostOften = function(){
        var obj = {};
        for (var i = 0; i < str.length; i++) {
            var index = str[i]; 
            if(obj[index]){
                obj[index]++;
            }else{
                obj[index] = 1;
            }
        }
        var maxNumber = 0,maxString;
        for(var key in obj){
            if(obj[key] > maxNumber){
                maxNumber = obj[key];
                maxString = key;
            }
        }
        console.log("字符 " + maxString+ " 出现频率 " + maxNumber+ " 次"); 
    }
    var ch = str.getMostOften();
    console.log(ch); //d , 因为d 出现了5次
    

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

    instanceOf 判断一个对象是不是某个类型的实例

    function Car(make, model, year) {
      this.make = make;
      this.model = model;
      this.year = year;
    }
    var mycar = new Car("Honda", "Accord", 1998);
    mycar instanceof Car;    // 返回 true
    mycar instanceof Object; // 返回 true
    mycar instanceof String; // 返回 false
    

    相关文章

      网友评论

        本文标题:JavaScript的原型链相关问题

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