【发布时间】:2015-12-07 06:28:02
【问题描述】:
我以为我已经用 JavaScript 找到了继承,直到这个让我陷入了循环。
我有这个 SuperController 作为 AMD 模块:
define([
'underscore',
'#allCollections'
],
function ( _ , allCollections) {
function SuperController() {
}
SuperController.prototype = {
control: function (viewPath, viewOpts, routerOpts, cb) {
},
default: function (id) {
alert('controller has not yet implemented a default route.')
}
};
return new SuperController();
});
然后我有一个我想从 SuperController 继承的控制器:
define(
[
'underscore',
'#allCollections',
'#allCSS',
'#SuperController'
],
function (_, allCollections, allCSS, SuperController) {
function Controller() {
}
Controller.prototype = {
jobs: function (id, changeViewCallback) {
var viewPath = 'app/js/jsx/relViews/jobs/jobsView';
var viewOpts = {};
viewOpts.id = id;
var routerOpts = {
useSidebar: true
};
SuperController.control(viewPath, viewOpts, routerOpts, changeViewCallback); // works!
this.control(viewPath, viewOpts, routerOpts, changeViewCallback); // does *not* work
},
default: function (id) {
console.log('default route implemented in controller.');
}
};
_.extend(Controller.prototype, SuperController.prototype);
return new Controller();
});
由于某种原因,我不能这样做 - 控制器无权访问 SuperController 中的控制权。让它工作的唯一方法是直接调用 SuperController.control() 。有什么明显的我做错了吗?
【问题讨论】:
-
继承失败的原因是“default”是JS中的保留字,不能作为函数名
标签: javascript requirejs