我在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中这些项的访问权限?
答案 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这样的东西来处理这个问题。