zoukankan      html  css  js  c++  java
  • 继承的三种方式

    //对象冒充方式继承(支持多继承) 
    function ClassA(sColor) {
    this.color = sColor;
    this.sayColor = function () {
    console.log(this.color);
    };
    }
    var a = new ClassA("yellow");
    function ClassB() {
    ClassA.call(this,"blue");
    this.ll = "hh";
    this.say = function(){
    console.log(this.ll);
    }
    }
    var b = new ClassB();
    var c = new ClassB();

    console.log(b.sayColor === c.sayColor);//false这说明每一个对象都保存了一份sayColor函数的代码体(体现函数 逻辑的数据)
    //的副本,显然是一种浪费


    //原型方式继承(不支持多继承)
    function ClassA() { }
    ClassA.prototype.color = "blue";
    ClassA.prototype.sayColor = function () {
    alert(this.color);
    };
    function ClassB() { }
    ClassB.prototype = new ClassA();
    ClassB.prototype.name = "";
    ClassB.prototype.sayName = function () {
    alert(this.name);
    };
    var a= new ClassA();
    var b= new ClassB();
    var c = new ClassB();
    console.log(b.sayColor === c.sayColor);//true共享同一份方法
    console.log(b.sayColor === a.sayColor);//true
    console.log(b.sayName === c.sayName);//true
    console.log(b.color === c.color);//true


    //混合方式(创建类的最好方式是用构造函数定义属性,用原型定义方法) //用对象冒充继承构造函数的属性,用原型链继承 prototype 对象的方法
    function ClassA(sColor) {
    this.color = sColor;
    }
    ClassA.prototype.sayColor = function () {
    alert(this.color);
    };
    function ClassB(sColor, sName) {
    ClassA.call(this, sColor);
    this.name = sName;
    }
    ClassB.prototype = new ClassA();
    ClassB.prototype.sayName = function () {
    alert(this.name);
    };
    var b = new ClassB("black","kk");
    var c = new ClassB("red","ll");
  • 相关阅读:
    Linux用户态程序计时方式详解
    我的代码重构经验
    基于链表的C语言堆内存检测
    C语言内存使用的常见问题及解决之道
    1151 LCA in a Binary Tree (30 分)
    1150 Travelling Salesman Problem (25 分)
    1149 Dangerous Goods Packaging (25 分)
    1148 Werewolf
    1155 Heap Paths (30 分)
    1154 Vertex Coloring (25 分)
  • 原文地址:https://www.cnblogs.com/huahua-1022/p/7120150.html
Copyright © 2011-2022 走看看