我看到JavaScript中的对象通常以以下两种方式组织。有人可以解释一下两者的区别和好处吗?在某些情况下,哪个更适合另一个吗?
非常感谢任何澄清。非常感谢!
第一:
var SomeObject;
SomeObject = (function() {
function SomeObject() {}
SomeObject.prototype.doSomething: function() {
},
SomeObject.prototype.doSomethingElse: function() {
}
})();
第二:
SomeObject = function() {
SomeObject.prototype.doSomething: function() {
},
SomeObject.prototype.doSomethingElse: function() {
}
}
最佳答案
这两个例子都不正确。我想你的意思是:
第一:
var SomeObject;
SomeObject = (function() {
function SomeObject() {
}
SomeObject.prototype.doSomething = function() {
};
SomeObject.prototype.doSomethingElse = function() {
};
return SomeObject;
})();
(请注意匿名函数末尾的返回,使用
=
而不是:
以及分号来完成函数分配。)也许您的意思是:
function SomeObject() {
}
SomeObject.prototype.doSomething = function() {
};
SomeObject.prototype.doSomethingElse = function() {
};
(没有匿名封闭功能。)
第二:
function SomeObject() {
}
SomeObject.prototype = {
doSomething: function() {
},
doSomethingElse: function() {
}
};
(请注意,原型(prototype)的赋值在
SomeObject
函数外部;在这里,我们使用:
是因为我们在对象初始化器内部。此外,我们在末尾也添加了;
来完成赋值语句。)如果我是正确的话,它们之间几乎没有什么区别。他们两个都创建了一个
SomeObject
构造函数,并向其原型(prototype)添加了匿名函数。第二个版本用一个全新的对象替换了SomeObject
构造函数的原型(prototype)(我不推荐),第一个版本只是增强了SomeObject
构造函数已经具有的原型(prototype)。一个更有用的形式是:
var SomeObject;
SomeObject = (function() {
function SomeObject() {
}
SomeObject.prototype.doSomething = doSomething;
function doSomething() {
}
SomeObject.prototype.doSomethingElse = doSomethingElse;
function doSomethingElse()
}
return SomeObject;
})();
在那里,我们分配给
doSomething
和doSomethingElse
的函数具有名称,这在您在调试器中浏览代码时很有用(它们显示在调用堆栈,断点列表等中)。封装了所有内容的匿名函数在那里,以便doSomething
和doSomethingElse
名称不会污染封闭的 namespace 。更多:Anonymouses anonymous我们中的一些人将其进一步发展:
var SomeObject;
SomeObject = (function() {
var p = SomeObject.prototype;
function SomeObject() {
}
p.doSomething = SomeObject$doSomething;
function SomeObject$doSomething() {
}
p.doSomethingElse = SomeObject$doSomethingElse;
function SomeObject$doSomethingElse()
}
return SomeObject;
})();
...这样我们不仅可以在列表中看到
doSomething
,而且可以看到SomeObject$doSomething
。有时这可能会妨碍您的工作,但这是一种样式选择。 (还请注意,我使用匿名函数将SomeObject.prototype
的别名括起来,以减少键入次数。)关于javascript - 两种JavaScript对象类型之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10230200/