原型链相关问题

问题7:有如下代码,解释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();

/*p.__proto__ === Person.prototype
  p.__proto__.constructor === Person
  Person.prototype.constructor === Person
*/
image.png

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

image.png

原型链

  1. p.toString()方法,先从p的属性里面找,没有,
  2. 再从p.__proto__中找,还是没有
  3. 再从p.__proto__.__proto__中找,找到了,

这样沿着__proto__这个链子一路找下去,就是原型链

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

var str = 'ahbbccdeddddfg';
String.prototype.getMostOften = function(){
    var obj = {}
    var maxIndex = 0
        //把字符串中的每个字符作为 obj 中的key,出现的次数作为value
    for(var i=0; i<this.length; i++){
        if(obj[this[i]]){
            obj[this[i]]++
        }else{
            obj[this[i]] = 1
        }
    }
        //找到最大的value,也就是最多出现了几次
    for(var key in obj){
        if(obj[key] > maxIndex){
            maxIndex = obj[key]
        }
    }
        //找到对应的key,也就是出现最多次数的字符
    for(var key in obj){
        if(obj[key]===maxIndex){
            return [key, obj[key]]
            
        }
    }
}
var ch = str.getMostOften();
console.log(ch);

//["d", 5]

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

作用:判断是不是一个对象的实例,返回值是 true、false

var arr = []
    obj = {}

arr instanceof Array     //true
    //内部逻辑为看实例的 __proto__ 是否为构造函数的 prototype 原型    
arr.__proto__ === Array.prototype //true
    //如果为 true ,则返回结果 true

arr instanceof Object     //true
    //内部逻辑为看实例的 __proto__ 是否为构造函数的 prototype 原型   
arr.__proto__ === Object.prototype //false
    //如果为 false ,则继续看下一层的 __proto__
arr.__proto__.__proto__ === Object.prototype //true
    //如果为 true ,则返回结果 true

obj instanceof Array     //false
    //内部逻辑为看实例的 __proto__ 是否为构造函数的 prototype 原型
obj.__proto__ === Array.prototype //false
    //如果为 false ,则继续看下一层的 __proto__
obj.__proto__.__proto__ === Array.prototype //false
    //如果到最深一层的 __proto__ (最深一层为null)比较还是不相等,则返回 false
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容