首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将'__extends = function () {}‘重写为对象

将'__extends = function () {}'重写为对象的方法如下:

代码语言:txt
复制
var __extends = {
  extend: function (child, parent) {
    for (var key in parent) {
      if (parent.hasOwnProperty(key)) {
        child[key] = parent[key];
      }
    }
    function ctor() {
      this.constructor = child;
    }
    ctor.prototype = parent.prototype;
    child.prototype = new ctor();
    child.__super__ = parent.prototype;
    return child;
  }
};

这段代码将'__extends'重写为一个对象,其中包含一个名为'extend'的方法。该方法接受两个参数,即子类和父类。它通过遍历父类的属性,并将其复制到子类中,实现了继承。同时,它还通过创建一个临时的构造函数和原型链的方式,确保子类的原型链指向父类的原型链,实现了原型继承。

这种重写后的'__extends'对象可以在类的定义中使用,以实现类的继承关系。例如:

代码语言:txt
复制
var ParentClass = (function () {
  function ParentClass() {
    // 父类构造函数
  }
  ParentClass.prototype.method = function () {
    // 父类方法
  };
  return ParentClass;
})();

var ChildClass = (function (_super) {
  __extends.extend(ChildClass, _super); // 使用重写后的__extends对象实现继承
  function ChildClass() {
    // 子类构造函数
    _super.call(this); // 调用父类构造函数
  }
  ChildClass.prototype.method = function () {
    _super.prototype.method.call(this); // 调用父类方法
    // 子类方法
  };
  return ChildClass;
})(ParentClass);

这样,通过重写后的'__extends'对象,我们可以方便地实现类的继承关系,并调用父类的构造函数和方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

PHP设计模式之装饰器模式定义与用法详解

什么时候使用装饰器模式 基本说来, 如果想为现有对象增加新功能而不想影响其他对象, 就可以使用装饰器模式.如果你好不容易客户创建了一个网站格式, 主要组件的工作都很完美, 客户请求新功能时, 你肯定不希望推翻重来...你不用重写原先的组件, 只需要"装饰"现有组件, 它们增加视频功能. 这样即可以保持原来的功能,还可以增加新功能....php class Video extends Decorato { public function __construct(IComponent $siteNow) { $this->...php class DataBase extends Decorato { public function __construct(IComponent $siteNow) { $this-&...下面的代码展示了Client如何将组件对象($component)包装在装饰器(Maintence)中: $component = new Maintenance($component); 类似于"接口

44420
  • 【TypeScript 演化史 — 第五章】将 asyncawait 编译到 ES3ES5 (外部帮助库)

    因此,在面向 ES2017 时,TypeScript 编译器无需将 async/await 重写其他某种构造,因为两个异步函数均已被原生支持。...编译 async/await 到 ES2015/ES2016 针对 ES2015,TypeScript 编译器使用生成器函数和 yield 关键字重写 async/await。...目前,TypeScript 中有以下帮助函数 __extends 用于继承 __assign 用于扩展对象属性 _rest 用于表示对象的剩余属性 还有一些装饰器 __decorate, __param...也就是说,应用程序中每个基于类的 React 组件触发帮助函数。 对于一个包含数十个或数百个 React 组件的中型应用程序,对于__extends 函数来说是大量重复的代码。...这个问题只会对于其它的帮助的函数也会存在,如开头讲的如何将 async/await 降级到 ES3/ES5 中的 __awaiter 和 __generator 帮助函数也很大。

    2.9K20

    【TypeScript 演化史 -- 5】将 asyncawait 编译到 ES3ES5 (外部帮助库)

    因此,在面向 ES2017 时,TypeScript 编译器无需将 async/await 重写其他某种构造,因为两个异步函数均已被原生支持。...编译 async/await 到 ES2015/ES2016 针对 ES2015,TypeScript 编译器使用生成器函数和 yield 关键字重写 async/await。...目前,TypeScript 中有以下帮助函数 __extends 用于继承 __assign 用于扩展对象属性 _rest 用于表示对象的剩余属性 还有一些装饰器 __decorate, __param...也就是说,应用程序中每个基于类的 React 组件触发帮助函数。 对于一个包含数十个或数百个 React 组件的中型应用程序,对于__extends 函数来说是大量重复的代码。...这个问题只会对于其它的帮助的函数也会存在,如开头讲的如何将 async/await 降级到 ES3/ES5 中的 __awaiter 和 __generator 帮助函数也很大。

    2.8K40

    PHP抽象类基本用法示例

    php //抽象类像一个模板,供子类扩展(重写),抽象类里有普通方法(有方法体),也有抽象方法,其中抽象方法没有方法体,且以分号结束。 //只要有一个抽象方法,那么此类必须定义抽象类。...</p "; } //function __destruct(){} } class Managers extends Employees{ public function __construct...($nameStr){ parent::__construct($nameStr); } /*public function work(){//如果子类没有扩展(重写)抽象类的抽象方法,...php //抽象类像一个模板,供子类扩展(重写),抽象类里有普通方法(有方法体),也有抽象方法,其中抽象方法没有方法体,且以分号结束。 //只要有一个抽象方法,那么此类必须定义抽象类。...</p "; } //function __destruct(){} } class Managers extends Employees{ public function __construct

    35821

    PHP 面向对象篇:继承、封装与多态

    例,编写一个实现该类的子类 Benz(仍然在 class.php 中定义): class Benz extends Car { public function __construct($seats...3、多态 方法重写 所谓多态,指的是在 PHP 继承体系中,子类可以重写父类的同名方法,这样,在子类对象中调用该方法,就会自动转发到子类方法调用,还是以 Car 和 Benz 例,我们在子类中重写父类的...drive 方法(所谓重写,英文是 override,即在子类中编写和父类同名方法,来覆盖父类的实现): class Benz extends Car { ... // 重写父类实现...类型转化 PHP 不像 Java 那样支持同一个类中定义多个同名方法(参数数量或类型不同,这种叫做方法重载),另外,由于子类一定包含了父类的公开方法,所以当类作为参数类型声明时,如果声明类型父类,则可以传入子类对象...,反过来,如果声明类型子类,则不能传入父类对象

    1.1K10

    PHP7-2: 面向对象开发

    / 使用场景:子类继承了父类, 并且必须实现父类的某些方法 时使用 # 格式: abstract # 注意: 类抽象类时;不能实例化对象调用方法和属性,类本身也不能自身调用属性和方法。...extends Peole { public function getName(){ echo '子类不能重写父类'; } public function learn...(){ echo '有阅读的能力'; } } // 类抽象类时不能实例化对象,也不能自己调用自己 // $hj = new Peole(); // $hj->getName...(); // echo ""; // $hj->getClassName(); class Woman extends Peole { public function getName...getNames(); // 结果: 我是 trait // 当子类继承了父类, 父类和trait 有同样的方法, 子类实例对象调用同样方法名时,优先采用trait的方法 解决Trait 方法冲突

    54930

    Java程序设计(面向对象)- 相关内容

    : * 抽象方法只能在抽象类里面 * 抽象类和抽象方法必须被abstract修饰 * 抽象类不能创建对象(不能实例化) * 抽象类中可以有非抽象的方法 * 抽象类和类的关系也是继承 * 一个类继承了抽象类要么重写所有的抽象方法...final: 抽象类不能和final共存,因为抽象类自身无法创建对象,我们需要通过子类创建对象,一旦抽象类使用final关键字,那么抽象类就没有子类 抽象方法不能和final共存,因为抽象方法后期需要被子类重写...定义接口所在的仍.java文件,虽然声明时使用的interface关键字的编译后仍然会产生.class文件。这点可以让我们将接口看做是一种只包含了功能声明的特殊类。...实现类仍然需要重写方法以实现具体的功能。...* 格式: * new 类/接口(){ * 如果是创建了继承这个类的子类对象,我们可以重写父类的方法 * 如果是创建了实现这个接口的子类对象,我们必须要实现该接口的所有方法 * }; * 原理:而是创建了继承这个类的子类对象或者是创建了实现这个接口的子类对象

    18330

    详细对比php中类继承和接口继承

    ,"<br "; } public function printer(){ echo "frist","<br "; } } class seconds extends frist{...frist 第二个类和第三个类没有重写printer()方法,第三个类实例化后可以调用printer()方法。...frist::printer()”的报错,父类对此方法置于保护模式下 (3)父类public方法可以被继承、可以被实例化对象调用,属于公开方法 (4)子类可重写父类public或者protected的方法...ex1(); } interface seconds{ public function ex2(); } interface third extends frist,seconds{ public...4、抽象类:只要一个类里面有一个方法是抽象方法,那么这个类就要定义抽象类 (1)抽象类继承抽象类不能重写父类方法。 (2)抽象类继承是对父类的方法的拓展。

    1.2K20
    领券