这些功能是如何运作的?第一个更典型的是我在考虑构造函数时考虑的内容。使用构造函数创建对象与返回对象有区别吗?
示例1:使用这个来命名和设置属性。然后使用new创建一个新的Book对象。
function Book(name, numPages) {
this.name = name;
this.numPages = numPages;
}
var myBook = new Book('A Good Book', '500 pages');
实施例2:通过使用新,只是调用函数本身返回一个对象。
function Movie(name, numMinutes) {
return { name:name, numMinutes:numMinutes };
}
var best = new Movie('Forrest Gump', '150');
var other = Movie('Gladiator', '180');
我想我试图找出是,如果这些都是他们创造的对象的方式有什么不同?如果是这样一个比另一个更好?是否有不同的情况下,一个会比另一个更好地工作?
返回一个文字不会通过构造函数上的'.prototype'支持继承。如果你想继承,使用“new”+构造函数。如果没有,请使用工厂,如第二代码。 – dandavis
在你的第二个片段中,'new'被忽略。不必要地创建从“Movie.prototype”继承的空对象。只是不要在工厂功能中使用'new'。不,他们不一样。 – Bergi
你不应该使用第二个。你不再从Movie.prototype继承,它是例如'other/best instanceof Movie //返回false'。我建议你阅读这个:https://zetafleet.com/blog/2014/12/back-to-basics-javascript-functions-constructors-and-this-demystified.html#ref-5 – Kiechlus