当前位置: 首页 > 面试题库 >

在保留对象引用和继承的同时组织原型javascript

全冥夜
2023-03-14
问题内容

我已经使用JavaScript原型和继承构建了一个大型应用程序。但是我很难组织我的代码。例如,我有一个类轮播,它具有许多类似这样的功能:

Carousel.prototype.next = function () {...}
Carousel.prototype.prev = function () {..}
Carousel.prototype.bindControls = function () {..}

我想这样组织我的代码

Carousel.prototype.controls = {
   next: function () { ... } , 
   prev: function() { ... },
   bindControls: function () { .. }
}

但是,这将导致“ this”的值丢失。我可以使用全局实例来跟踪它,但是当类被继承时这会引起问题,例如,在另一个文件中,我有类似的东西可以覆盖父类。

BigCarousel.prototype.next = function () {...}

我的继承是这样完成的:

Function.prototype.inheritsFrom = function (parentClass) {
    if (parentClass.constructor === Function) {
        //Normal Inheritance
        this.prototype              = $.extend(this.prototype , new parentClass);
        this.prototype.constructor  = this;
        this.prototype.parent       = parentClass.prototype;
    }
    else {
        //Pure Virtual Inheritance
        this.prototype = $.extend(this.prototype, parentClass);
        this.prototype.constructor = this;
        this.prototype.parent = parentClass;
    }
    return this;
};

所以我可以做:

BigCarousel.inheritsFrom(Carousel)

有谁知道我该如何处理“ this”值?


问题答案:

您可以自己制作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));


 类似资料:
  • 本文向大家介绍js对象继承之原型链继承实例,包括了js对象继承之原型链继承实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js对象继承之原型链继承的用法。分享给大家供大家参考。具体分析如下: 其它说明:kitty也是有构造方法的,即new Object()。Object默认也有一些方法和属性,见javascript手册中的 "object对象"。同时,它也有原型,只是为空而已 { }。

  • 问题内容: 我刚刚开始使用原型JavaScript,并且在弄清楚范围更改时如何从原型函数内部保留对主对象的引用时遇到了麻烦。让我说明一下我的意思(我在这里使用jQuery): 我知道我可以通过在以下内容的开头保留对主对象的引用: 然后用于访问主要对象的属性。但是,当我拥有一大堆原型函数时会发生什么?我是否必须在每个文件的开头都保存对它的引用?似乎应该有一种更清洁的方法。那么这样的情况呢: 在那种情

  • 本文向大家介绍JavaScript使用原型和原型链实现对象继承的方法详解,包括了JavaScript使用原型和原型链实现对象继承的方法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript使用原型和原型链实现对象继承的方法。分享给大家供大家参考,具体如下: 实际上JavaScript并不是一门面向对象的语言,不过JavaScript基于原型链的继承方式、函数式语法,使得编

  • 在编程中,我们经常会想获取并扩展一些东西。 例如,我们有一个 user 对象及其属性和方法,并希望将 admin 和 guest 作为基于 user 稍加修改的变体。我们想重用 user 中的内容,而不是复制/重新实现它的方法,而只是在其之上构建一个新的对象。 原型继承(Prototypal inheritance) 这个语言特性能够帮助我们实现这一需求。 [[Prototype]] 在 Java

  • 在传统的基于Class的语言如Java、C++中,继承的本质是扩展一个已有的Class,并生成新的Subclass。 由于这类语言严格区分类和实例,继承实际上是类型的扩展。但是,JavaScript由于采用原型继承,我们无法直接扩展一个Class,因为根本不存在Class这种类型。 但是办法还是有的。我们先回顾Student构造函数: function Student(props) { t

  • 问题内容: 我一直在阅读道格拉斯·克罗克福德(DouglasCrockford)撰写的“Javascript:好的部分”,尽管有些极端,但我同意他的许多意见。 在第3章中,他讨论了对象,并在某一时刻列出了一种模式,以简化和避免使用内置的“ new”关键字带来的一些混淆/问题。 因此,我尝试在正在处理的项目中使用它,并且在尝试从嵌套对象继承时发现了一个问题。如果我覆盖使用此模式继承的嵌套对象的值,则