以下编写javascript函数的方法是等效的。
也许第一个更清楚。
然而,许多程序员更喜欢第二种方式。
优先选择第二种方式的两种方式之间存在显着差异吗?
第一种方式:
Class.prototype.fn = function () {
var obj = {
…
};
return obj;
};
第二种方式:
Class.prototype.fn = function () {
return {
.........
};
};
答案 0 :(得分:7)
除非您需要在通过文字创建后对obj
执行操作,否则没有区别,这只是一种主观风格偏好。 (注意,所述使用可能在代码中,或在调试期间;更多在下面。)
例如,这里有一个真正的实际区别:
Class.prototype.fn = function () {
var obj = {
subordinate: {
foo: function() {
if (obj.flag) {
doOneThing();
}
else {
doSomethingElse();
}
}
}
};
return obj;
};
在那里,您需要名称,以便obj.subordinate.foo()
有效。 (并不是说我主张这样做,但它是一个客观而非主观区别的例子。)但是,除非需要在初始化之后和返回之前使用它,否则这只是一个主观的事情。
当然,该用法不一定必须在代码中。如果需要,带有obj
变量的表单在调试时会更有用在你归还之前检查你要归还的东西。
也许这里有点偏离滑雪道,但我认为它是相关的:与你问题中的例子相比,这之间有一个真实的,实际的,切实的区别:
Class.prototype.foo = function () {
…
};
Class.prototype.bar = function () {
…
};
和此:
(function() {
function Class_foo() {
…
}
function Class_bar() {
…
}
Class.prototype.foo = Class_foo;
Class.prototype.bar = Class_bar;
})();
......区别在于前者,函数没有名称(引用它们的属性,但不是函数本身)。在后一种情况下,functions have real names可以帮助您的工具通过显示调用堆栈中的名称,断点列表等来帮助您。