美文网首页@IT·互联网
JavaScript的原型链相关问题

JavaScript的原型链相关问题

作者: 柏龙 | 来源:发表于2017-05-09 23:57 被阅读0次

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

Person 是构造函数
prototype 是构造函数内部的原型对象 指向 Person.prototype
__proto__p new 出来的一个对象,对象的__proto__ 指向 Person.prototype
constructor 指向Person

Person.png

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

function Person(name){
    this.name = name;
}
Person.prototype.sayName = function(){
    console.log('My name is :' + this.name);
}
var p = new Person("若愚")
p.sayName();
p.toString();

toString() 从原型链上得来
首先 p.toString方法,会在自己属性上查找,如果没有找到会沿着__proto__属性继续到构造函数Person.prototype里找toString方法,如果还未找到,再继续往Person.prototype__proto__最后找到toString()方法。

toString.png

原型链:
每个构造函数和对象都有一个隐藏的__proto__属性,当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype里没找到的话,又会在自己的__proto__找,于是就这样一直找下去,这样就组成了一条链,这个就是原型链。

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

var str = 'ahbbccdeddddfg';
var ch = str.getMostOften();
console.log(ch); //d , 因为d 出现了5次
var str = 'ahbbccdeddddfg';
String.prototype.getMostOften = function(){
    var obj = {};
    for (var i = 0; i < str.length; i++) {
        var index = str[i]; 
        if(obj[index]){
            obj[index]++;
        }else{
            obj[index] = 1;
        }
    }
    var maxNumber = 0,maxString;
    for(var key in obj){
        if(obj[key] > maxNumber){
            maxNumber = obj[key];
            maxString = key;
        }
    }
    console.log("字符 " + maxString+ " 出现频率 " + maxNumber+ " 次"); 
}
var ch = str.getMostOften();
console.log(ch); //d , 因为d 出现了5次

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

instanceOf 判断一个对象是不是某个类型的实例

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}
var mycar = new Car("Honda", "Accord", 1998);
mycar instanceof Car;    // 返回 true
mycar instanceof Object; // 返回 true
mycar instanceof String; // 返回 false

相关文章

  • JavaScript的原型链相关问题

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

  • 【javascript】继承

    javascript只支持实现继承,而且继承主要是依靠原型链来实现的。 原型链 javascript将原型链作为实...

  • js实现继承的几种方式

    如何实现继承? js中实现继承的方式主要是通过原型链完成的。了解原型链的相关信息可以点这里 javascript中...

  • js原型、原型链、继承的理解

    一、原型、原型链 原型是Javascript中的继承的基础,JavaScript的继承主要依靠原型链来实现的。 原...

  • JS进阶(1) —— 人人都能懂的构造函数

    大家都知道原型和原型链是 JavaScript 中最经典的问题之一,而构造函数又是原型和原型链的基础,所以先了解清...

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

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

  • javaScript原型链

    javaScript原型链概念JavaScript之继承(原型链)数据结构var Person = functio...

  • 原型、原型链

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

  • javascript碎片知识001

    javascript中的对象(原型,原型链) 什么是原型? 原型是JavaScript中的继承的基础,JavaSc...

  • 原型链相关问题

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

网友评论

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

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