zoukankan      html  css  js  c++  java
  • 原型链的本质论

    1.1 原型链的内部属性

       1.1.1.Prototype

          Prototype属性表示该类的父类的原型对象,一般可以用属性_proto_来访问(IE不支持)。

       1.1.2.Class

         Class属性表示类名,是一个字符串。

       例如:

         Object类:

             {

                Prototype:null,

                Class:"Object"

             }

          因为Object类为跟类,他没有父类,所以Prototype属性为空。

          其他类js类如果没有继承其他js类它的Prototype属性应该为Object原型对象。

    1.2 prototype的作用——原型链的实现

        1.2.1.实现继承

           function Person(){}

           function Student(){}

          他们的内部属性定义为:

         Person: {

            Prototype:Object的原型对象,

             Class:"Person" 

         }

         Student: {

            Prototype:Object的原型对象,

             Class:"Student" 

         }

        现在使 Student.prototype = new Person();

       

         Student: {

            Prototype:Person的原型对象,

             Class:"Student" 

         }

         这样就实现了继承。 

    1.2.2 分享属性和方法

        在创建一个类的实例时,该实例隐式地包含有对自身原型对象的引用。因此,实例中也包含内部属性Prototype的定义。

         function Person {

            this.name = "";

            this.age = 0;

        }

        function Man {

          this.length = 0

        }

        function Student {

          this.level = ""

      }

      Man.prototype = new Person();

      Student.prototype = new Man();

     那么在实例化Person时,这个实例隐式地包含有自身内部属性Prototype的值,该值包含有Person类属性的描述;同样的,在实例化Man时,这个实例也包含内部属性Prototype的值,值也包含Man的属性描述;同样,Student类也一样。

        如果Student的实例调用一个属性,那么它会按照下面的步骤:

       1.在Student中查找这个属性,若存在,则返回,否则查找Protoype属性值,查到是Man的实例。

       2.在Man中查找这个属性,若存在,则返回,否则查找Protoype属性值,查到是Person的实例。

       3.在Person中查找这个属性,若存在,则返回,否则查找Protoype属性值,查到是Object的实例。

       4.在Object中查找这个属性,若存在,则返回,否则返回undefined。

  • 相关阅读:
    注册登录
    ASP.NET常用编程代码(一)
    HTML、CSS、JS、PHP 的学习顺序~(零基础初学者)
    如何学习javascript?(转)
    如何完全卸载SQL Server 2005
    如何给网页标题栏上添加图标(favicon.ico)
    网页制作常用代码
    网页颜色代码对照表
    ASP.NET常用编程代码(二)
    50个PHOTOSHOP快捷键技能!
  • 原文地址:https://www.cnblogs.com/ai3xiaoyi/p/3439862.html
Copyright © 2011-2022 走看看