js原型链

1.有如下代码,解释Person、 prototype、 proto、p、constructor之间的关联。

1
2
3
4
5
6
7
8
function Person(name){
this.name = name;
}
Person.prototype.sayName = function(){
console.log('My name is :' + this.name);
}
var p = new Person("若愚")
p.sayName();
  • Person是一个函数,通过new(构造函数)方法生成一个实例p,任何函数都有prototype属性,它指向一个对象,而任何对象都有proto属性,指向它的构造者Person的原型对象,即prototype对象。原型对象都有constructor,指向函数(Person)本身。

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

  • toString来自于对象Object.prototype
  • 0_1477302558932_upload-8dd10d7c-1a1e-4ec2-9017-a0233fed6d85
  • 原型链:使用构造函数构造出来的对象会有一个proto属性,它指向构造函数的原型对象prototype,原型对象prototype作为一个对象也拥有proto属性,它指向原型对象的构造者,也就是Object对象的prototype属相。由proto指向构造者的prototype原型对象,在最终指向Object对象构成的链条,就是原型链。

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    String.prototype.getMostOften = function(){
    var json = {},
    max = 0,
    result;
    //for 循环string内的每一个字母 如果出现过这字字母就在后面的次数上+1,没出现过就 =1
    for(var i = 0;i<this.length;i++){
    if(json[this[i]] !== undefined){//if(json[this[i]]){
    json[this[i]] +=1;
    }else{
    json[this[i]] = 1;
    }
    }
    // console.log(json);
    //for循环json键值对,和max比大小
    for(var key in json){
    if(json[key]>max){
    max = json[key];
    result = key;
    }
    }
    return result;
    };
    var str = 'ahbbccdedddddfg';
    var ch = str.getMostOften();
    console.log(ch); //d , 因为d 出现了5次

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

  • 作用: 判断一个对象是否某个构造函数构造的实例。实质是构造函数的原型对象(Function.prototype)是否在变量的原型链(proto)上
    0_1477305373016_upload-cd9da119-87c1-4b68-960f-f1a1b6572cea
    1
    2
    3
    4
    5
    6
    7
    8
    function isObjInstanceOffunc(obj,func) {
     var __proto__=obj.__proto__;
     do{
        if(__proto__===func.prototype) return true;
    if(!__proto__) return false;
     }while(__proto__=__proto__.proto__)
     return false;
    }
文章目录
  1. 1. 1.有如下代码,解释Person、 prototype、 proto、p、constructor之间的关联。
  2. 2. 2.上例中,对对象 p可以这样调用 p.toString()。toString是哪里来的? 画出原型图?并解释什么是原型链。
  3. 3. 3. 对String做扩展,实现如下方式获取字符串中频率最高的字符
  4. 4. 4.instanceOf有什么作用?内部逻辑是如何实现的?
,