美文网首页
第三十六弹-原型链

第三十六弹-原型链

作者: 我是小韩 | 来源:发表于2016-07-23 16:23 被阅读0次

一、问答

1.有如下代码,解释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();

Person:构造函数
p:Person构造函数创造的实例对象
Person.prototype: p对应的原型对象
constructor:原型对象的一个属性,等于Person.prototype
p.__proto__:等于Person.prototype


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

每个对象上都有一个proto 属性,这个属性会指向该对象的原型对象,而原型对象也会有这个proto属性指向自己的原型对象,这种关系直到指向Object对象结束,这个链条式的关系就是原型链。
在调用对象的属性和方法时,首先在自己本身上找,然后再上原型链上寻找,直到找到合适的为止,如果找到Object对象还未找到就会返回未定义。

Paste_Image.png

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

      String.prototype.getMostOften=function(){
        var arr=this.split(""),
            storeLen={},
            mostlen,
            mostChar;
        for (var i=0;i<arr.length;i++){
          var tmpChar=arr[i];
          if(storeLen[tmpChar]){
            storeLen[tmpChar]+=1;
          }else{
            storeLen[tmpChar]=1;
          }
        }
       for (var key in storeLen){
         // 初始化mostChar和mostlen等于第一个属性||比较最大值
          if(!mostChar||storeLen[key]>mostlen){
            mostChar=key;
            mostlen=storeLen[key];
          }
       }
       return mostChar;
      }
      var str = 'ahbbccdeddddfg';
      var ch = str.getMostOften();
      console.log(ch); //d , 因为d 出现了5次

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

instanceof 用来检查对象是否是构造函数的实例。
内部逻辑是判断从原型链底端向上判断原型链上的对象是否是否是该构造函数的原型对象

      function instanceOf(obj,Fn){
          if(typeof obj!=="object"||typeof Fn!=="function") return false;
          var __proto__=obj.__proto__;
          while (__proto__) {
            if( __proto__===Fn.prototype){
              return true;
            }
             __proto__= __proto__.__proto__;
          }
        return false;
      }

参考文档:


本教程版权归小韩同学和饥人谷所有,转载须说明来源

相关文章

  • 第三十六弹-原型链

    一、问答 1.有如下代码,解释Person、 prototype、__proto__、p、constructor之...

  • JavaScript 原型、原型链与原型继承

    原型,原型链与原型继承 用自己的方式理解原型,原型链和原型继承 javascript——原型与原型链 JavaSc...

  • js 对象继承

    内容来自《JavaScript高级程序设计》第三版第6章第3节 原型链 ECMAScript中描述了 原型链的概念...

  • 原型、原型链

    (什么是原型、原型链?有什么作用) JavaScirpt深入之从原型到原型链 图解 Javascript 原型链 ...

  • 原型链&查找规则&作用域链

    原型链(隐式原型链) 属性的查找规则(原型链的查找规则) 作用域链

  • 关于原型原型链的理解

    什么是原型? 什么是原型链? 为什么需要原型,和原型链?

  • 原型链实现继承

    原型链 原型链示意图 使用原型链实现继承 这是怎么回事呢? 原型链在哪? 听我细细道来~ 首先 Teacher 实...

  • 继承

    原型链直接继承 原型链直接继承prototype 原型链继承_prototype属性 继承_构造函数绑定

  • js中的实现继承的几种方式

    大纲:原型链借用构造函数组合继承原型式继承寄生式继承寄生组合式继承 1、原型链: 什么是原型链? 原型链的基本思想...

  • 【原型和原型链】什么是原型和原型链

    【原型和原型链】什么是原型和原型链https://blog.csdn.net/xiaoermingn/articl...

网友评论

      本文标题:第三十六弹-原型链

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