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

And*_*rew 4 javascript object

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

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

var example = {
  message: null,
  setup: function( message ) {
    example.message = message;
    alert( message );
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

我使用对象这样很多在我的网站,为处理器设置了一堆绑定Ajax交互等.我一直在试图了解面向对象的JavaScript,并且一直在做一些阅读(1,2).在Mozilla文档中,建议将对象定义为函数,因此更像是:

var example = function( message ) {
    ....
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

IE浏览器.如果我这样做:

var example = function( message ) {
    alert('message');
}
Run Code Online (Sandbox Code Playgroud)

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

Sar*_*raz 6

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

这被称为对象文字符号.

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

这被称为函数表达式.

更多读物:

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

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

var example = function( message ) {
    alert('message');
    this.hello = function(){
        alert('hello'); 
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

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

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

var e = new example('hello');
e.hello();
Run Code Online (Sandbox Code Playgroud)

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


对OOP感兴趣的读物: