我不能感谢你的时间和帮助!我已经搜索了将近2天但找不到我的确切答案。开始:
我总是使用对象文字符号来创建我的对象。但是,我最近遇到过需要创建同一对象的多个实例的情况。我相信我试图创建的是“构造函数”:
我需要能够创建多个“Window”对象:
var window1 = new Window();
var window2 = new Window();
var window3 = new Window();
我希望能够组织这样的方法:
window1.errorMessage.show();
window2.errorMessage.hide();
window3.errorMessage.hide();
而不是像:
window1.showErrorMessage();
window2.hideErrorMessage();
window3.hideErrorMessage();
以文字符号构建窗口对象的示例:
var Window = {
id: null,
init : function(id) {
this.id = id;
},
errorMessage : {
show : function(message) {
// jquery that will simply take the id of this window,
// find the errorMessage html element within the window,
// insert the "message" and show it.
},
hide : function() {
// jquery that will simply take the id of this window,
// find the errorMessage html element within this window and hide it.
}
}
}
我将如何尝试使用构造函数和原型构建窗口对象的示例:
function Window(id) {
this.id = id;
this.errorMessage = function() {}
}
Window.prototype.errorMessage = function() {}
Window.errorMessage.prototype.show = function(message) {
// jquery that will simply take the id of this window,
// find the errorMessage html element within the window,
// insert the "message" and show it.
}
Window.errorMessage.prototype.hide = function() {
// jquery that will simply take the id of this window,
// find the errorMessage html element within this window and hide it.
}
当我尝试执行以下代码时:
var window1 = new Window();
window1.errorMessage.show('An error message');
(最后我想称之为:)
this.errorMessage.show('An error message');
我从Firefox收到以下控制台错误:
非常感谢你的帮助。我很感激。
答案 0 :(得分:2)
如果您正在进行继承,则只需使用prototype
。既然你没有做继承,那就忘了prototype
。
每个Window
都有一个ErrorMessage
的实例。所以我会这样写:
function Window(id) {
this.id = id;
this.errorMessage = new ErrorMessage();
}
function ErrorMessage() {
this.show = function () {};
this.hide = function () {};
}
var window1 = new Window();
window1.errorMessage.show();
答案 1 :(得分:2)
我仍然会像您尝试的那样在函数原型上声明您的方法,但您必须在新的show
类型上声明hide
和ErrorMessage
方法。我认为这样的事情是最好和最有效的(因为ErrorMessage
的实例将共享相同的show
和hide
方法)事情要做(如果我理解你的需要正确)。
function Window(id) {
this.id = id;
this.errorMessage = new ErrorMessage();
}
function ErrorMessage() { }
ErrorMessage.prototype.show = function() {}
ErrorMessage.prototype.hide = function() {}