ฉันกำลังอ่านหน้านี้ (โดยเฉพาะในส่วนของโรงงาน)
มีการกล่าวถึงเพื่อหลีกเลี่ยงการใช้คีย์เวิร์ด new
เพื่อป้องกันกรณีลืมโดยไม่ตั้งใจ แนะนำให้ใช้โรงงาน
ตัวอย่างใหม่ของเพจ:
function Bar() {
var value = 1;
return {
method: function() {
return value;
}
}
}
Bar.prototype = {
foo: function() {}
};
new Bar();
Bar(); // These are the same.
ตัวอย่างโรงงานของเพจ:
function Foo() {
var obj = {};
obj.value = 'blub';
var private = 2;
obj.someMethod = function(value) {
this.value = value;
}
obj.getPrivate = function() {
return private;
}
return obj;
}
ข้อเสียจากโรงงาน:
- ใช้หน่วยความจำมากขึ้นเนื่องจากวัตถุที่สร้างขึ้นไม่ได้แชร์วิธีการบนต้นแบบ
- เพื่อสืบทอด โรงงานจำเป็นต้องคัดลอกวิธีการทั้งหมดจากวัตถุอื่นหรือวางวัตถุนั้นไว้บนต้นแบบของวัตถุใหม่
- การยกเลิกห่วงโซ่ต้นแบบเพียงเพราะไม่มีคีย์เวิร์ดใหม่ถือเป็นการขัดต่อจิตวิญญาณของภาษา
การหลีกเลี่ยง new
เพื่อป้องกันปัญหาในกรณีที่คุณลืมเป็นสิ่งที่เข้าใจได้ แต่สิ่งที่ฉันไม่ค่อยเข้าใจก็คือพวกเขาบอกว่าตัวอย่างจากโรงงานใช้หน่วยความจำมากกว่าเนื่องจากไม่ได้ใช้ฟังก์ชันต้นแบบ แล้วทำไมไม่ใช้อะไรแบบนี้แทนล่ะ?
วิธีแก้ปัญหาของฉัน:
var Foo = function () {
var foo = function () {
};
foo.prototype = {
bar: function () { }
};
return new foo();
};
คำถาม: ฉันพลาดบางสิ่งบางอย่างที่ทำให้นี่ไม่ใช่วิธีแก้ปัญหาที่ดีกว่าหรือไม่ โซลูชันของฉันลบข้อเสียที่ระบุไว้ของวิธีการจากโรงงานหรือไม่ เพราะเหตุใดหรือเพราะเหตุใด
new
s - person Bergi   schedule 18.07.2014