這些功能是如何運作的?第一個更典型的是我在考慮構造函數時考慮的內容。使用構造函數創建對象與返回對象有區別嗎?
示例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