zoukankan      html  css  js  c++  java
  • 说说原型和原型链

    背景

    最近看了下面试题提到了原型和原型链,每次都记不清楚他们的关系,看了一些资料,最后按照自己的理解写了这篇博客,撸一撸他们之间的关系

    一、原型 prototype 和 __proto__

    1.每个实例对象p都是由一个构造函数Person new出来的(也就是实例化),实例对象p有一个__proto__属性,__proto__属性指向构造函数person的prototype原型对象

    2.每个构造函数Person都有一个prototype原型对象

    3.prototype原型对象里的constructor指向构造函数Person本身

    function Person(nick, age){
        this.nick = nick;
        this.age = age;
     }
    Person.prototype.sayName = function(){
        console.log(this.nick);
     }
    
    var p = new Person('Byron', 20);
    
    console.log(p)  //Person {nick: 'Byron', age: 20}

         

    实例对象的__proto__指向构造函数的prototype,从而实现继承。

    prototype对象相当于特定类型所有实例对象都可以访问的公共容器 ,看代码(这里就不详细介绍了,感兴趣的可以自己上网查)

    function Person(nick, age){
        this.nick = nick;
        this.age = age;
    }
    Person.prototype.sayName = function(){
        console.log(this.nick);
    }
    
    var p1 = new Person('Byron', 20);
    
    var p2 = new Person('Casper', 25);
    
    p1.sayName()  // Byron
    
    p2.sayName()  // Casper
    
    p1.__proto__ === Person.prototype       //true
    
    p2.__proto__ === Person.prototype   //true
    
    p1.__proto__ === p2.__proto__           //true
    
    Person.prototype.constructor === Person  //true

    再说说Person.prototype,因为 Person.prototype也是一个对象,所以他也有自己的构造函数,他的构造函数就是Object ,而Object也有自己的构造函数和原型对象,Object的构造函数是函数,Object的__proto__指向

    Function.prototype,函数也有自己的构造函数和原型对象,这么说有点难理解,看下面这张关系图,就很清晰了

     它们之间的关系就形成了一个原型链,我觉得这张图就很清楚了,所以就不在多说什么了。~~

  • 相关阅读:
    python 3+djanjo 2.0.7简单学习(三)--Django 管理页面
    python 3+djanjo 2.0.7简单学习(二)--创建数据库和模型
    lucene3.6.0 经典案例 入门教程
    Android——自定义Actionbar左侧覆盖不全的解决方案
    Android——ViewPager多页面滑动切换以及动画效果
    Android——LayoutInflater详解
    java.sql.SQLException:指定了无效的 Oracle URL
    核函数方法简介
    IEEE论文格式要求
    oracle使用DataBase Configuration Assistant创建、删除数据库
  • 原文地址:https://www.cnblogs.com/zienlove/p/15723522.html
Copyright © 2011-2022 走看看