zoukankan      html  css  js  c++  java
  • js继承的三种实现

    概念:在有些面向对象语言中,可以使用一个类(子类)继承另一个类(父类),子类可以拥有父类的属性和方法,这个功能可以在js中进行模拟。

    三种方法:

    第一种:扩展Object方法

     1 Object.prototype.ext=function(parObject){//Object.prototype.ext在原型链上定义的ext所有的对象都可以访问到
     2     //循环遍历父类对象所有属性
     3     for(var i in parObject){
     4         //为子类对象添加这个遍历到的属性
     5         //它的值是父类对象这个属性的属性值
     6         this[i] = parObject[i];
     7     }
     8 }
     9 function Person(p_name,p_age){
    10     this.name=p_name;
    11     this.age=p_age;
    12     this.speak=function(){
    13         alert(this.name+this.age);
    14     }
    15 }
    16 function Student(p_no){
    17     this.no=p_no;
    18     this.say=function(){
    19         alert(this.no+this.name_this.age);
    20     }
    21 }
    22 var stu = new Student(101);
    23 stu.ext(new Person('xiaoqiang',20));
    24 stu.speak();
    25 stu.say();

    第二种:使用call和apply方法

     1 function Person(p_name,p_age){
     2     this.name=p_name;
     3     this.age=p_age;
     4     this.speak=function(){
     5         alert(this.name+this.age);
     6     }
     7 }
     8 function Student(p_no,p_name,p_age){
     9     this.no=p_no;
    10     this.say=function(){
    11         alert(this.name+this.age+this.no);
    12     }
    13     Person.call(this,p_name,p_age);//this是上下文,后面的参数是传递给person的参数,参数的先后顺序要一一对应,如果是用apply则后面的参数要用数组
    14 }
    15 var stu = new Student(8,'zhagsan',18);
    16 stu.speak();
    17 stu.say();

    第三种:原型继承

     1 function Person(p_name,p_age){
     2     this.name=p_name;
     3     this.age=p_age;
     4     this.speak=function(){
     5         alert(this.name+this.age);
     6     }
     7 }
     8 function Student(p_no){
     9     this.no=p_no;
    10     this.say=function(){
    11         alert(this.name+this.age+this.no);
    12     }
    13 }
    14 Student.prototype = new Person('wangwu',21);
    15 var stu = new Student(10);
    16 stu.speak();
    17 stu.say();
  • 相关阅读:
    C++栈(stack)、队列(queue)、链表(list)的常用函数
    C++中cin>>a原理
    C++中vector和堆的常用使用方法&例题:数据流中的中位数
    使用centos8搭建僵尸毁灭工程(PZ)服务器
    【从C#走进Python】四、装饰器
    【从C#走进Python】三、变量声明
    【从C#走进Python】二、迭代器
    【从C#走进Python】一、上下文管理器
    【C#基础】拥抱Lambda(2):表达式树与LINQ
    【机器学习笔记】Python机器学习基本语法
  • 原文地址:https://www.cnblogs.com/sunnie-cc/p/6269194.html
Copyright © 2011-2022 走看看