原型链

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();

先清楚以下三点:

  • 1.每个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,也就是该函数的原型对象;
  • 2.原型对象和实例中都有一个constructor属性,均指向了构造函数本身;
    Person.prototype.constructor==Person //true
    p.constructor==Person //true
  • 3.实例中有一个__proto__属性,该属性指向了原型对象;
    p.__proto__==Person.prototype //true

所以,在这个例子中,prototypePerson的一个属性,该属性指向了Person的原型对象,也即Person.prototypePerson的原型对象,constructor是该原型对象的一个属性,指向Person; pPerson的一个实例,该实例拥有__proto__属性,该属性指向Person.prototype

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

原型链_第1张图片

当访问 p.toString时,先在对象p的基本属性中查找,发现没有,然后通过 __proto__Person.prototype中查找,还是没有,再通过 __proto__Object.prototype中查找,最终找到了toString()方法。
当访问一个对象的属性或方法时,先在基本属性中查找,如果没有,再沿着__proto__这条链向上找,这就是原型链

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

 String.prototype.getMoreOften=function(){
     var str=this,
         count=0,
         letter="";
      while(str.length>0){
         for(var i=0; i
原型链_第2张图片

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

instanceof 的作用是判断一个对象是不是一个函数的实例。实现方式是通过判断某个实例对象的内部指针__proto__是否与所测试对象(函数)的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;
        }

你可能感兴趣的:(原型链)