原型链

作者: 老虎爱吃母鸡 | 来源:发表于2016-09-22 20:18 被阅读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是一个构造函数, 其中prototype是Person的原型对象, p是Person构造出来的实例, 拥有name属性, 属性值是传入的参数若愚, p拥有一个内部可以访问的属性[[prototype]], __proto__就是浏览器对这个属性的实现, 这个属性指向了Person构造函数的原型对象prototype, 其中sayName方法是定义在原型对象上的, 意味着构造出来的实例都拥有sayName这个方法, prototype里还有一个属性constructor, 这个属性指向了构造函数Person

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

    2016-09-22_200059.png
    首先, 先解释一下原型链, JS是门面向对象的语言, 而面向对象的语言都有一个标志, 就是类, 通过类可以创建多个具有相同属性和方法的对象, 但是JS中没有类, JS中通过原型链实现继承, 在构造函数创建实例的时候, 实例对象内部的__proto__会指向构造函数的原型对象prototype, 通过这种方式, 实例就可以访问到原型对象上的属性和方法, 而__proto__是所有对象内部都存在的属性, 所以原型对象内部也存在__proto__, 指向的是构造函数的prototype, 在上面的例子中就指向Object.prototype, 那么就可以访问到上面的toStringd, valueOf等方法
  2. 对String做扩展,实现如下方式获取字符串中频率最高的字符

String.prototype.getMostOften = function(){
    var str = this.toString()
    var lengthArr = []
    for (var i = 0; i < this.length; i++) {
        var r = new RegExp(this[i],'g')
        lengthArr.push(str.match(r).length)
    }
    var maxLength = Math.max.apply(null,lengthArr)
    var index = lengthArr.indexOf(maxLength)
    return this[index]
}
var str = 'ahbbccdeddddfg';
var ch = str.getMostOften();
console.log(ch); //d , 因为d 出现了5次
  1. instanceof有什么作用?内部逻辑是如何实现的?
    instanceof可以判断一个对象是否是一个构造函数的实例, 内部通过递归判断对象的__proto__是否等于构造函数的原型来实现
function instanceOf(obj,func) {
    var proto = obj.__proto__
    if(proto === func.prototype) {
        return true
    } else {
        if (proto.__proto__) {
            return instanceOf(proto,func)
        } else {
            return false
        }
    }
}
instanceOf([],Object)//测试, 返回true
instanceOf([],String)//测试, 返回false

相关文章

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

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

  • 原型、原型链

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

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

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

  • 关于原型原型链的理解

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

  • 原型链实现继承

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

  • 继承

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

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

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

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

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

  • js原型链

    目录 1.对象的原型和原型链1.1什么是原型1.2查看原型1.3对象的原型链 2.使用构造函数2.1 函数的原型链...

  • 廖雪峰JS小记

    (function(){})() 原型,原型链 浅谈Js原型的理解JS 原型与原型链终极详解 对象 对象:一种无序...

网友评论

      本文标题:原型链

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