JavaScript方法和结构之间的差异
此方法的结构/调用之间有什么区别?JavaScript方法和结构之间的差异,javascript,oop,object,methods,Javascript,Oop,Object,Methods,此方法的结构/调用之间有什么区别? 我经常看到不同的方法结构,我不明白每种方法的好处是什么 var obj = { some_method: function(){ return 'This works'; } } var Obj2 = function(){ return { some_method: function(){ return 'This works too'; } } }
我经常看到不同的方法结构,我不明白每种方法的好处是什么
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());
它们都返回它们应该返回的内容,但在什么情况下我应该使用它们中的每一个?第一个类似于a,即不能有多个类型相同但状态不同的对象。就像在整个应用程序中只可能有一个实际的动物,而不是很多
一个更实际的例子,考虑这个页面。有多个
Post
s,每个都有自己的状态(他们有什么Comment
s,他们有什么文本,他们当前正在编辑等等)。如果您刚刚做了var post=
,那么这意味着只能有一个post。我怀疑您可能会有一些特别的jQuery来处理该单例中的多个帖子,但无论如何,您都没有对问题进行面向对象的建模
第二个错误是使用构造函数,创建的对象将不是
Obj2
的实例,而是Object
。您可以使用如下构造函数:
function Obj2() {
//initialize fields here
}
Obj2.prototype.someMethod = function(arg) {
return this.state + arg;
};
返回对象文字在构造函数中起作用的原因是
允许返回任何类型的对象。但是构造构造函数是没有意义的
仅返回对象
s
您通常只需要对象
s将相关的静态功能分组在一起(行为,但不需要延长数据)
或者作为字典/映射/关联数组(数据但无行为)。在第一个代码中,您调用的是
obj.some_method()
some_method
是一个函数,嵌套为obj
的属性。此模式是名称空间的一种方式
在第二种情况下,您将使用
Obj2
作为构造函数创建一个对象。但是,您没有返回Obj2
的实例,而是返回了一个与前面示例的obj
具有相同结构的对象。这将使您从instanceof
测试中得到错误的结果,因为new Obj2
应该返回一个自身的实例,而您的代码没有这样做。第二个可能是某种形式的模块模式?当然,在这种情况下,不必使用new
调用它。@FelixKling在模块模式中,您会立即调用它,因为要求客户端免费调用函数是没有意义的。您应该能够只var module=require(“模块”)代码>而不是var模块=require(“模块”)()代码>我明白了。我从来没有真正使用过它,所以在我看来它很相似:)编写这样的函数通常是在你想要构建一个对象的时候完成的。大写字母和new
确实建议将其用作构造函数,但是(本例)如果作为普通函数调用,其工作原理相同