4

相对 JS 新手在这里试图了解定义 JS 对象的两种方式之间的区别......

在某些情况下,我看到了一些我称之为“命名空间”对象或“处理程序”的示例,它们可能看起来像这样:

var example = {
  message: null,
  setup: function( message ) {
    example.message = message;
    alert( message );
  }
}

我可能会使用这样的东西来分组一些相关的功能。如果我打电话,example('foo!')我希望会foo!出现一条警报消息,如果我打电话,example.message我希望它会返回foo!

我的第一个问题是:这种对象(未定义为函数)叫什么?

我在我的网站中经常使用这样的对象,作为处理程序来设置一堆用于 ajax 交互的绑定等。我一直在尝试学习面向对象的 javascript,并且一直在做一些阅读1、2)。在 Mozilla 文档中,建议将对象定义为函数,所以更像这样:

var example = function( message ) {
    ....
}

我的第二个问题是:这种对象(定义为函数)叫什么?

我不太了解两者之间的区别,所以我遇到了很多问题,这就提出了问题 3:

如果你将一个对象定义为一个函数,如果你不一定希望它们在实例化时执行,你如何定义对象的属性?

IE。如果我这样做:

var example = function( message ) {
    alert('message');
}

然后我知道这example('foo!')会触发警报foo!。但是,如何在对象上定义其他属性或方法以供以后访问和/或调用?

4

1 回答 1

6

我的第一个问题是:这种对象(未定义为函数)叫什么?

这被称为对象文字表示法

我的第二个问题是:这种对象(定义为函数)叫什么?

这就是函数表达式

更多阅读:

如果你将一个对象定义为一个函数,如果你不一定希望它们在实例化时执行,你如何定义对象的属性?

您可以使用this关键字来添加属性或使用prototype如下属性:

var example = function( message ) {
    alert('message');
    this.hello = function(){
        alert('hello'); 
    }
}

或者

var example = function( message ) {
    alert('message');
}

example.prototype.hello = function(){ 
   alert('hello');
}

var e = new example('hello');
e.hello();

使用时this,需要使用new关键字来实例化对象。


对 OOP 感兴趣的读物:

于 2012-04-22T19:34:43.927 回答