zoukankan      html  css  js  c++  java
  • JS 中通过对象关联实现『继承』

    JS 中继承其实是种委托,而不是传统面向对象中的复制父类到子类,只是通过原型链将要做的事委托给父类。

    下面介绍通过对象关联来实现『继承』的方法:

    Foo = {
        // 需要提供一个 init 方法来初始化参数,而不能通过构造函数来初始化参数了
        init: function(who) {
            this.me = who;
        },
        identify: function() {
            return "I am " + this.me;
        }
    };
    Bar = Object.create(Foo);  // 通过 Object.create() 实现对象的关联
    Bar.speak = function() {
        alert( "Hello, " + this.identify() + "." );
    };
    var b1 = Object.create(Bar);  // 同样通过 Object.create() 创建需要使用的对象
    b1.init("b1");  // 通过 init 方法初始化成员属性
    var b2 = Object.create(Bar);
    b2.init("b2");
    b1.speak();
    b2.speak();

    我们使用 Object.create() 来关联两个对象,从而实现了『继承』(委托)。

    这比传统的通过构造函数实现类和继承更简洁。

    其实通过 Object.create() 的方式就是修改对象的 __proto__ 来实现继承,只是直接修改 __proto__ 是不可取的,这个属性毕竟是私有的,不标准的,所以才有了 Object.create() 这个方法。

    *注:Bar 使用 Object.create() 进行关联,所以要添加自己的成员只能一个个通过 Bar.xxx 进行添加,这样可能会比较麻烦。所以,可以先通过对象字面量的方式 Bar = { ... } 完成 Bar 的操作,再通过 ES6 提供的 Object.setPrototypeOf(Bar, Foo) 实现关联。

  • 相关阅读:
    bzoj 3036: 绿豆蛙的归宿
    bzoj 2956: 模积和 ——数论
    bzoj 4378: [POI2015]Logistyka ——树桩数组+离散化
    Codeforces Round #441 Div. 2题解
    es 学习笔记
    Redis 热点key
    深入拆解Tomcat &Jetty——极客时间
    mysql 行转列
    在kafka connect 同步 mysql 主从数据库
    使用Kafka Connect 导入导出数据
  • 原文地址:https://www.cnblogs.com/3body/p/6245496.html
Copyright © 2011-2022 走看看