zoukankan      html  css  js  c++  java
  • 继承 (js原型链)

    原型链是实现继承的主要方法。基本思想:利用原型让一个引用类型继承另一个引用类型的属性和方法。

    1.构造函数、原型、实例的关系:

    每个构造函数都有原型属性(Prototype),指向一个原型对象(函数创建相应产生原型对象),每个原型对象包含一个属性(constructor),指向构造函数。每个实例都包含指向原型对象的内部指针(_proto_)。

    如果令实例A的原型对象等于另一个构造函数的实例B,那么A的原型对象将包含指向B的原型对象的内部指针(_proto_),所以A可以继承来自B的原型对象中的属性和方法。相应的,B的原型对象也可以引用其他实例的原型对象(通过实例的赋值方法)。按照这种方法,一层层递进,可以构成实例和原型的链条(即原型链)。

    注意一点:实例B的原型对象的构造器(constructor)属性是指向B的构造函数,而A的原型对象相当于引用B的原型对象,A的原型对象被重写!A的构造器属性指向B的构造函数。

    最后,原型链的末端为Object的原型对象。因为一切都是对象,所有的函数都是Object的实例。

    2.实现原型链的基本模型:

     1 function Supertype(){
     2 
     3     this.property=true;
     4 
     5 }
     6 Supertype.prototype.getSuperValue=function(){
     7     return this.property;
     8 };
     9 function SubType(){
    10     this.subproperty=false;
    11 }
    12 SubType.prototype=new Supertype();
    13 SubType.prototype.getSubValue=function(){
    14     return this.subproperty;
    15 };
    16 var instance=new SubType();
    17 console.log(instance.getSuperValue()); //true
    18 console.log(instance.constructor);
    19 //f Supertypr(){
    20 this.property=true;
    21 }
    其中构造函数中的属性仅包含在实例对象中,不包含在它的原型对象中,原型对象中的属性和方法需要通过.prototype.name=value来进行添加。故,property位于Subtype.prototype中(将实例
    后的对象赋给Subtype.prototype)而不在SuperType.prototype中
     1 function test1(){
     2     this.swung=true;
     3 }
     4 const obj1=new test1();
     5 test1.prototype.swingSword=function(){
     6     return this.swung;
     7 }
     8 console.log(obj1.swingSword());
     9 test1.prototype={
    10     piece:function(){
    11         return true;
    12     }
    13 };
    14 console.log(obj1.swingSword());
    15 const obj2=new test1();
    16 console.log(obj2.piece());


  • 相关阅读:
    JAVA面试——设计模式
    CSS清除浮动
    CSS外边距
    baidu-ife
    笔记一则
    Atom
    校园网认证
    四月甘九-省
    Python sys.argv[]用法
    Python模块导入的方法
  • 原文地址:https://www.cnblogs.com/alaner/p/9510774.html
Copyright © 2011-2022 走看看