美文网首页
原型链相关问题

原型链相关问题

作者: 辉夜乀 | 来源:发表于2017-05-15 22:34 被阅读83次

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

相关文章

  • 原型链相关问题

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

  • 原型链相关问题

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

  • 原型链相关问题

    创建对象有几种方法 使用对象字面量的方式创建 使用构造函数创建对象 使用Object.create()方法创建 原...

  • this_原型链_继承

    this部分 原型链相关问题问题7:有如下代码,解释Person、 prototype、proto、p、const...

  • this_原型链_继承

    this部分链接 原型链相关问题 问题7:有如下代码,解释Person、 prototype、proto、p、co...

  • JavaScript的原型链相关问题

    问题1:有如下代码,解释Person、 prototype、__proto__、p、constructor之间的关...

  • this_原型链_继承相关问题

    在函数被直接调用时this绑定到全局对象。在浏览器中,window 就是该全局对象,函数调用模式this指向win...

  • 原型链和继承相关问题

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

  • this、原型链、继承

    1. this2.原型链-instanceof实现3.继承的实现 ** this 相关问题 ** ** 1、 ap...

  • JS的__proto__和prototype

    最近在回顾JS的原型和原型链的知识,熟悉JS的同学都知道JS的继承是靠原型链实现的,那跟原型链相关的属性__pro...

网友评论

      本文标题:原型链相关问题

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