理解定义为函数的JS对象与未定义为函数的对象

时间:2012-04-22 19:23:21

标签: javascript object

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

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

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

我可能会使用这样的东西来组合一些相关的功能。如果我打电话给example('foo!'),我会看到一条包含foo!的提醒消息,如果我打电话给example.message,我希望它会返回foo!

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

我在我的网站中使用这样的对象,作为处理程序为ajax交互等设置一堆绑定。我一直在尝试学习面向对象的javascript,并且一直在做一些阅读({{3 }},1)。在Mozilla文档中,建议将对象定义为函数,因此更像是:

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

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

我真的不明白两者之间的区别,所以我遇到了很多问题,提出了问题3:

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

IE中。如果我这样做:

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

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

1 个答案:

答案 0 :(得分:6)

  

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

知道为 object literal notation

  

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

知道为 function expression

更多读物:

  

如果将对象定义为函数,则如何定义属性   如果您不一定希望它们在执行时执行,则该对象   实例

您可以使用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: