首页 > web前端 > js教程 > 如何组织 JavaScript 原型并在继承过程中维护'this”上下文?

如何组织 JavaScript 原型并在继承过程中维护'this”上下文?

Barbara Streisand
发布: 2024-11-19 21:48:03
原创
725 人浏览过

How Can I Organize JavaScript Prototypes and Maintain `this` Context During Inheritance?

使用保留的对象引用和继承组织 JavaScript 原型

在 JavaScript 中,随着应用程序变得越来越大,使用原型和继承组织代码可能会变得具有挑战性。考虑以下场景:我们有一个具有多个函数的轮播类:

Carousel.prototype.next = function () {...}
Carousel.prototype.prev = function () {..}
Carousel.prototype.bindControls = function () {..}
登录后复制

为了改进代码组织,我们可能希望将这些函数分组为一个对象:

Carousel.prototype.controls = {
   next: function () { ... } , 
   prev: function() { ... },
   bindControls: function () { .. }
}
登录后复制

但是,这种方法破坏了对 this 对象的引用,导致从类继承时出错。为了解决这个问题,我们可以探索不同的策略:

创建 Controls 类:

一种方法是定义一个单独的 Controls 类,如下所示:

var Controls = function (controllable_object) {
    this.ref = controllable_object;
};
Controls.prototype.next = function () {
    this.ref.foo();
}
// ..

var Carousel = function () {
    this.controls = new Controls(this);
};
// ..
登录后复制

这允许我们维护对原始对象的引用,但不允许覆盖 Controls 的实现。

使用依赖注入:

更灵活的方法是利用依赖注入:

var Controls = function (controllable_object) {
    this.ref = controllable_object;
};
Controls.prototype.next = function () {
    this.ref.foo();
}
// ..

var Carousel = function () {
        this.controllers = [];
    };
Carousel.prototype.addController = function (controller) {
        this.controllers.push(controller);
    };
// ..

var carousel = new Carousel();
carousel.addController(new Controls(carousel));
登录后复制

这允许我们创建多个控制器并将它们动态添加到轮播中,提供灵活性和覆盖实现的能力。

以上是如何组织 JavaScript 原型并在继承过程中维护'this”上下文?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板