JavaScript的原型链相关问题

问题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

JavaScript的原型链相关问题_第1张图片
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()方法。

JavaScript的原型链相关问题_第2张图片
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的原型链相关问题)