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

Javascript 理解定义为函数的JS对象与未定义为函数的JS对象,javascript,object,Javascript,Object,这里的相对JS新手试图理解定义JS对象的两种方法之间的区别 在某些情况下,我看到了一些我称之为“名称空间”对象或“处理程序”的示例,它们可能看起来像这样: var example = { message: null, setup: function( message ) { example.message = message; alert( message ); } } var example = function( message ) { .... }

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

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

var example = {
  message: null,
  setup: function( message ) {
    example.message = message;
    alert( message );
  }
}
var example = function( message ) {
    ....
}
var example = function( message ) {
    alert('message');
    this.hello = function(){
        alert('hello'); 
    }
}
我可能会使用类似这样的方法对一些相关函数进行分组。如果我调用
example('foo!')
,我会看到一条带有
foo!的警告消息
出现,如果我调用
example.message
我希望它返回
foo

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

我在我的站点中经常使用这样的对象,作为处理程序来为ajax交互等设置一系列绑定。我一直在尝试学习面向对象的javascript,并做了一些阅读(,)。在Mozilla文档中,建议将对象定义为函数,因此更像这样:

var example = {
  message: null,
  setup: function( message ) {
    example.message = message;
    alert( message );
  }
}
var example = function( message ) {
    ....
}
var example = function( message ) {
    alert('message');
    this.hello = function(){
        alert('hello'); 
    }
}
我的第二个问题是:这种对象(定义为函数)调用什么

我真的不明白两者之间的区别,所以我有很多问题,这就引出了问题3:

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

即,如果我这样做:

var example = function( message ) {
    alert('message');
}
然后我知道
example('foo!')
将触发带有
foo!的警报。但是,如何在对象上定义其他属性或方法,以便以后访问和/或调用

我的第一个问题是:这类对象(不定义为 函数)调用

这是众所周知的

我的第二个问题是:这类对象(定义为 函数)调用

这是众所周知的

更多阅读资料:

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

您可以使用
this
关键字添加属性,也可以像这样使用
prototype
属性:

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

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


对OOP感兴趣的阅读:

  • 斯托扬·斯特凡诺夫

这非常有帮助,谢谢!一个次要的子问题,在对象文字和函数表达式之间有什么主要的问题或微妙的区别吗?因为我习惯使用obj。文字如果我尝试使用函数表达式,有什么我应该特别小心的吗?也许值得注意,但是如果你从
e=new example
中省略
new
这个
函数中的
引用全局对象(
窗口
)。