我是javascript原型的新手。
在示例中,原型是与主程序定义一致地分配的,但是这样做会产生启动序列后果。
下面显示了我当前如何将原型应用于一组单例。为了清楚起见,最好在后代类中或在更明显的“绑定”位置分配原型。 (请注意,面板是在控制器内实例化的,以强制分离。)
还有其他位置/方法可以实现我所忽略的目标吗?另外,我是否违反了当前方法中的任何著名样式?
var controller = new Controller();
function Controller() {
var panels = {
search: SearchPanel,
results: ResultsPanel,
details: DetailsPanel,
action: ActionPanel,
};
$.each(panels, function (i, v) {
// THE QUESTION REFERS TO THIS FOLLOWING STATEMENT:
v.prototype = new PanelCommon();
panels[i] = new v();
});
this.publish = function (site, message) {
$.each(panels, function (i, v) {
if (v[site]) v[site](message);
});
}
/*...*/
}
function PanelCommon() { /*...*/ }
function SearchPanel() { /*...*/ }
function ResultsPanel() { /*...*/ }
function DetailsPanel() { /*...*/ }
function ActionPanel() { /*...*/ }
最佳答案
通常,在构造函数声明后立即分配原型。另外,不要忘记修改新实例化的原型的constructor
属性。
Sean也对使用Object.create提出了一个有趣的观点,但是是否要这样做实际上取决于PanelCommon构造函数的内容。您还可能需要在较旧的浏览器中对Object.create进行填充。
function PanelCommon() {}
function SearchPanel() {}
SearchPanel.prototype = new PanelCommon();
SearchPanel.prototype.constructor = SearchPanel;
function ResultsPanel() {}
ResultsPanel.prototype = new PanelCommon();
ResultsPanel.prototype.constructor = ResultsPanel;
function DetailsPanel() {}
DetailsPanel.prototype = new PanelCommon();
DetailsPanel.prototype.constructor = DetailsPanel;
function ActionPanel() {}
ActionPanel.prototype = new PanelCommon();
ActionPanel.prototype.constructor = ActionPanel;
关于javascript - 在哪里/何时设置函数原型(prototype)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20020989/