0

我在 SO 和其他地方搜索了一个简单的继承示例,但找不到。我见过的例子是模糊的、复杂的,或者只是让我不舒服。我有几个服务功能,它们都共享一些功能,我称之为基本服务:

function baseservice() {
   var loadAnimate = function () {
      $('#ajax-spinner').show();
    };
   var loadComplete = function () {
      $('#ajax-spinner').hide();
    };
   var apiEndpoint = function() {
      return "http://api.com/api/";
    };
};

我现在有其他具有此功能的服务:

var documentservice = function() {
    // repeated code
    var loadAnimate = function () {
        $('#ajax-spinner').show();
    };
    var loadComplete = function () {
        $('#ajax-spinner').hide();
    };

    var apiEndpoint = "http://api.com/api/";

    var sendRequest = function (payload, callback) {
        loadAnimate();
        // do stuff with apiEndpoint
        // call loadComplete on promise
    };

如何为 documentservice 提供对 baseservice 中这些项目的访问权限?

4

1 回答 1

2

由于 Javascript 是一种原型语言,它没有像 Java 这样的语言那样的类继承。如果您想要一个非常简单的继承实例,您可以尝试以下操作:

function baseservice() {
  this.loadAnimate = function () {
    $('#ajax-spinner').show();
  };
  this.loadComplete = function () {
    $('#ajax-spinner').hide();
  };
  this.apiEndpoint = function() {
    return "http://api.com/api/";
  };
};

var documentservice = new baseservice();
documentservice.sendRequest() = function() { /* ... */ }

然后,documentservice拥有所有baseservice的成员(注意this.inbaseservice的函数声明而不是var)。

如果您不想使用new关键字,您可以创建一个函数extend,或者添加一个指向 baseservice ( document.baseservice = baseservice) 的字段,或者进行深度(递归)复制,然后添加documentservice.sendRequest.

当然,人们已经使用ded/klass之类的东西来解决这个问题。

于 2013-10-07T17:28:17.003 回答