相对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!
的提醒。但是,如何在对象上定义其他属性或方法以便以后访问和/或调用?
答案 0 :(得分:6)
我的第一个问题是:这种对象是什么(未定义为 函数)叫?
我的第二个问题是:这种对象是什么(定义为 函数)叫?
知道为 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: