zoukankan      html  css  js  c++  java
  • JS 继承(类式 与 原型式)

    1.

    /* -- 类式继承 -- */
    //先声明一个超类

    function Person(name) {
    this.name = name;
    }
    //给这个超类的原型对象上添加方法 getName
    Person.prototype.getName = function() {
    return this.name;
    }
    //实例化这个超
    var a = new Person('Darren1')
    console.log(a.getName());//Darren1

    //再声明类

    function Programmer(name, sex) {
    //这个类中要调用超类Person的构造函数,并将参数name传给它
    Person.call(this, name);
    this.sex = sex;
    }
    //这个子类的原型对象等于超类的实例
    Programmer.prototype = new Person();
    //因为子类的原型对象等于超类的实例,所以prototype.constructor这个方法也等于超类构造函数,你可以自己测试一下,如果没这一步,console.log(Programmer.prototype.constructor这个是Person超类的引用,所以要从新赋值为自己本身

    console.log(Programmer.prototype.constructor);
    /*function Person(name) {
    this.name = name;
    } */

    Programmer.prototype.constructor = Programmer;
    console.log(Programmer.prototype.constructor);

    /*function Programmer(name, sex) {
    Person.call(this, name);
    this.sex = sex;
    }
    */
    //子类本身添加了getSex 方法
    Programmer.prototype.getSex = function() {
    return this.sex;
    }
    //实例化这个子类
    var _m = new Programmer('Darren2', 'male');
    //自身的方法
    console.log(_m.getSex());//male
    //继承超类的方法
    console.log(_m.getName());//Darren2

    2.
    /* -- 原型式继承 -- */
    //clone()函数用来创建新的类Person对象
    var clone = function(obj) {
    4
    var _f = function() {};
    //这句是原型式继承最核心的地方,函数的原型对象为对象字面量
    _f.prototype = obj;
    return new _f;
    }
    //先声明一个对象字面量
    var Person = {
    name: 'Darren',
    getName: function() {
    return this.name;
    }
    }
    //不需要定义一个Person的子类,只要执行一次克隆即可
    var Programmer = clone(Person);
    //可以直接获得Person提供的默认值,也可以添加或者修改属性和方法
    alert(Programmer.getName())
    Programmer.name = 'Darren2'
    alert(Programmer.getName())

    //声明子类,执行一次克隆即可
    var Someone = clone(Programmer);

  • 相关阅读:
    URAL 1998 The old Padawan 二分
    URAL 1997 Those are not the droids you're looking for 二分图最大匹配
    URAL 1995 Illegal spices 贪心构造
    URAL 1993 This cheeseburger you don't need 模拟题
    URAL 1992 CVS
    URAL 1991 The battle near the swamp 水题
    Codeforces Beta Round #92 (Div. 1 Only) A. Prime Permutation 暴力
    Codeforces Beta Round #7 D. Palindrome Degree hash
    Codeforces Beta Round #7 C. Line Exgcd
    Codeforces Beta Round #7 B. Memory Manager 模拟题
  • 原文地址:https://www.cnblogs.com/mguo/p/3178101.html
Copyright © 2011-2022 走看看