@דוד ל.ט.
@אהרן
function myModule() {
...
}
var myModule = new myModule(); //creating the instanceמה זה עושה ??
מה עושה שמכניסים את אותו משתנה לתוכו?
כשכותבים new לפני קריאה לפונקציה, אז:
במידה והפונקציה מחזירה אובייקט (לא פרימיטיבי כטקסט ומספר כלומר כזה שהלוג שלו מיוצג עם סוגריים {}), אז הוא מוחזר למשתנה.
במידה ואיננה מחזירה אובייקט (או שאיננה מחזירה כלום או טיפוס פרימיטיבי) אז נוצר אובייקט חדש שמהווה "קרקע" (בתכנותית: מופע, instance) לthis שבפונקציה. בלי ה"קרקע" הזו הפונקציה הנקראת "דורכת" על "קרקע" הפונקציה הקוראת.
הדגמה:
function func() {
this.a = "variable ";
return "function result...";
}
var resultWithoutNew = func();
console.log(resultWithoutNew); //function result...
console.log(a); // variable
console.log(resultWithoutNew.a); // undefined
a = 123;
var resultWithNew = new func();
console.log(resultWithNew); // { a: 'variable ' }
console.log(a); // 123
console.log(resultWithNew.a); // variable
הnew מאפשר לתת "סקופ" חדש למה שהפונקציה מחזירה וככה ליצור מופעים שונים של אותו מחלקה-אב טיפוס על מאפייניו והפונקציות שלו.
לא מבין [כמעט] כלום
this.a = "variable ";
שווה ל
func.a = "variable ";
?
איך
console.log(a); // variable
a = 123;
ממתי יש משתנה a?
הרי a הוא רק תכונה (property) של func והעתקים ממנו?!
var resultWithoutNew = func();
אם כן אני צודק שיש 3 'רמות' של העברה בין פונקציה לפונקציה
resultWithNew = func();
resultWithNew = new func();
resultWithNew = func;
מעביר רק את התוצאה.
רק את התכונות (במידה ומדובר באוביקט).
את כל הפונקציה במלואה.
?
אם משתמשים באפשרות 3, ואז שעכשיו מכיל בתוכו
this.a = "variable ";
מי שם ה-this ?
סליחה על ההתקפה ותודה על הסבלנות 🙂
פורסם במקור בפורום CODE613 ב18/09/2015 16:48 (+03:00)