zoukankan      html  css  js  c++  java
  • JS实现继承的原理及方法详解

    一、理解原型

    js创建的每个函数都有一个prototype属性,这个属性指向一个对象。这个对象用来存储通过这个函数所创建的所有实例共有的属性和方法, 这个对象称为所有实例的原型对象。每个原型对象都包含一个constructor属性,它指向prototype属性所在的函数。

    二、搜索对象属性的过程

    每当代码读取某个对象的某个属性时,都会执行一次搜索,目标是具有给定名字的属性。搜索首先从对象实例本身开始。如果在实例中找到了具有给定名字的属性,则返回该属性的值;如果没有找到,则继续搜索_proto_指针指向的原型对象,在原型对象中查找具有给定名字的属性。如果在原型对象中找到了这个属性,则返回该属性的值。

    通过实例只能访问原型对象的值,不能修改原型对象的值。如果我们在实例中添加了一个属性,而该属性与实例原型中的一个属性同名,那么就会在实例中创建该属性,该属性将屏蔽掉原型中的那个属性。

    三、使用原型实现继承

    1.继承的含义

    继承是面向对象编程中的一个重要概念,通过继承可以使子类的实例使用在父类中定义的属性和方法。

    2.实现继承

    在js中我们可以创建一个对象o,通过这个对象可以访问父类中定义的所有属性和方法,然后把这个对象作为子类实例的原型对象。 这样的话子类实例就可以通过搜索原型来访问父类中的所有属性和方法。一般情况下可以通过创建父类对象的实例来创建对象o;举例如下:

     1 function Animal(){
     2 
     3 }
     4 Animal.prototype.shout=function(word){
     5   console.log(word);
     6 }
     7 
     8 function Bird(){
     9 
    10 }
    11 Bird.prototype=new Animal();
    12 //为原型添加constructor属性;
    13 Bird.prototype.constructor=Bird;
    14 
    15 var bird=new Bird();
    16 bird.shout("gugugu...");

    上例中shout属性的查找过程:先查找bird实例,没找的,再查找bird的原型对象,即Animal的实例,没找到,接下来查找Animal实例的原型,找到。由于每一个实例都有一个原型,通过这种方式就会形成一条原型链,图示如下:


    四、封装一个实现继承的方法

    1 function extend(subclass, superclass) {
    2   "use strict";
    3   //创建一个对象作为子类的原型对象
    4   function o() { this.constructor = subclass; }
    5   //设置对象的原型为父类的原型,从而使对象可以访问父类方法
    6   o.prototype = superclass.prototype;
    7   return (subclass.prototype = new o());
    8 };
  • 相关阅读:
    SQL Server 索引结构及其使用(四)
    正确配置和使用SQL mail
    2进制、8进制、10进制、16进制...各种进制间的轻松转换(c#)
    配置远程服务器
    SQLServer基本函数
    将人民币的数字表示转化成大写表示(C#版)
    SQL Serer 索引全攻略
    亿众国际点对点文件传输程序
    表的相关操作
    windows文件副檔名說明
  • 原文地址:https://www.cnblogs.com/snsart/p/10858203.html
Copyright © 2011-2022 走看看