相对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!
.但是,如何在对象上定义其他属性或方法以便以后访问和/或调用?
我的第一个问题是:这种对象(未定义为函数)被称为什么?
这被称为对象文字符号.
我的第二个问题是:这种对象(定义为函数)被称为什么?
这被称为函数表达式.
更多读物:
如果将对象定义为函数,如果在实例化时不一定要让它们执行,那么如何定义对象的属性?
您可以使用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感兴趣的读物: