此方法结构/调用之间有什么区别?
我经常看到不同的方法结构,我无法理解每种方法的好处。
var obj = {
some_method: function(){
return 'This works';
}
}
var Obj2 = function(){
return {
some_method: function(){
return 'This works too';
}
}
}
console.log(obj.some_method());
var obj3 = new Obj2();
console.log(obj3.some_method());
他们都返回了他们应该做的事情,这里是JsFiddle,但在什么情况下我应该使用他们中的每一个?
答案 0 :(得分:1)
第一个类似于singleton,I.E。你不能拥有相同类型但具有不同状态的多个对象。就像它只能在你的整个应用程序中拥有一个真正的动物而不是很多。
更实际的例子,请考虑此页面。有多个Post
,每个都有自己的状态(它们有Comment
,它们有什么文本,当前是否正在编辑等等。如果您刚刚var post =
,那意味着只能有一个帖子。我怀疑你可能会有一些特殊的jQuery来操作那个单例中的多个帖子,但是你还是没有对这个问题进行面向对象的建模。
第二个是错误地使用构造函数,创建的对象不是Obj2
但Object
的实例。您将使用如下构造函数:
function Obj2() {
//initialize fields here
}
Obj2.prototype.someMethod = function(arg) {
return this.state + arg;
};
返回对象文字在构造函数中工作的原因是构造函数
允许返回任何类型的对象。但是构建一个构造函数是没有意义的
只返回Object
s。
您通常只需要Object
来将相关的静态功能组合在一起(行为,但没有延长的数据)
或者作为字典/地图/关联数组(数据但没有行为)。
答案 1 :(得分:0)
在第一个代码中,您正在调用obj.some_method()
。 some_method
是一个函数,嵌套为obj
的属性。这种模式是命名空间的一种方式。
在第二种情况下,您使用Obj2
作为构造函数创建对象。但是,您返回的对象与前一个示例的Obj2
具有相同的结构,而不是返回obj
的实例。这将为您提供instanceof
测试的错误结果,因为new Obj2
应该返回自己的实例,而您的代码没有这样做。