0

我非常感谢您的时间和帮助!我已经搜索了将近 2 天,但找不到我的确切答案。开始:

我一直使用对象文字表示法来创建我的对象。但是,我最近遇到了需要为同一个对象创建多个实例的情况。我相信我正在尝试创建的是“构造函数”:

我需要能够创建多个“窗口”对象:

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 收到以下控制台错误:

  • TypeError:Window.errorMessage 未定义
  • TypeError:Window.errorMessage.show 不是函数



非常感谢你的帮助。我很感激。

4

2 回答 2

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();
于 2013-08-28T17:11:23.027 回答
2

我仍然会像您尝试的那样在函数的原型上声明您的方法,但是您必须在新类型上声明show和方法。我认为这样的事情是最好和最有效的(因为实例都将共享相同的方法和方法)(如果我正确理解您的需求)。hideErrorMessageErrorMessageshowhide

function Window(id) {
    this.id = id;
    this.errorMessage = new ErrorMessage();
}

function ErrorMessage() { }
ErrorMessage.prototype.show = function() {}
ErrorMessage.prototype.hide = function() {}
于 2013-08-28T17:15:58.697 回答