Javascript继承的简单示例?

时间:2013-10-07 17:10:13

标签: javascript jquery

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

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
    };

如何向文档服务提供对baseservice中这些项的访问权限?

1 个答案:

答案 0 :(得分: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.函数声明中的baseservice而不是var。)

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

当然,人们已经使用像ded/klass这样的东西来处理这个问题。