摘要:也就是說這個變量,保存的內存地址就是,同時被標記為的實例以上就是構造函數的整個執行過程。
前言算是
當一個函數創建好以后,我們并不知道它是不是構造函數(構造函數習慣上首字母大寫),只有當一個函數以 new 關鍵字來調用的時候,我們才能說它是一個構造函數
eg: function Person (name, age) { this.name = name; this.age = age; } var per1 = new Person("yuchen", 22);構造函數的執行流程:
當以 new 關鍵字調用時,會創建一個新的內存空間
函數體內部的 this 指向該內存"也就是Person的實例"
* 每當創建一個實例的時候,就會創建一個新的內存空間(#f2, #f3), * 創建 #f2 的時候,函數體內部的 this 指向 #f2, * 創建 #f3 的時候,函數體內部的 this 指向 #f3。
執行函數體內的代碼
(給 this 添加屬性,就相當于給實例添加屬性)
默認返回 this
由于函數體內部的 this 指向新創建的內存空間,默認返回 this ,就相當于默認返回了
該內存空間,也就是上圖中的 #f1。此時,#f1的內存空間被變量 p1 所接受。也就是說
p1 這個變量,保存的內存地址就是 #f1,同時被標記為 Person 的實例
以上就是構造函數的整個執行過程。
構造函數的返回值構造函數執行過程的最后一步是默認返回 this,構造函數的返回值還有其它情況
(1) )沒有手動添加返回值,默認返回 this function Person1() { this.name = "zhangsan"; } var p1 = new Person1(); p1: { name: "zhangsan" } (2) 手動添加一個基本數據類型的返回值,最終還是返回 this function Person2() { this.age = 28; return 50; } var p2 = new Person2(); console.log(p2.age); // 28 p2: { age: 28 } 注意:如果上面是一個普通函數的調用,那么返回值就是 50 !!! (3) 手動添加一個復雜數據類型(對象)的返回值,最終返回該對象 例一: function Person3() { this.height = "180"; return ["a", "b", "c"]; } var p3 = new Person3(); console.log(p3.height); // undefined console.log(p3.length); // 3 console.log(p3[0]); // "a" 例二: function Person4() { this.gender = "男"; return { gender: "中性" } } var p4 = new Person4(); console.log(p4.gender); // "中性"
// 構造函數基礎點學習完畢啦~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/105870.html
摘要:部分源碼分析小記底層數據結構底層的數據結構就是數組,數組元素類型為類型,即可以存放所有類型數據。初始容量大于初始化元素數組新建一個數組初始容量為為空對象數組初始容量小于,拋出異常無參構造函數。 JDK1.8 ArrayList部分源碼分析小記 底層數據結構 底層的數據結構就是數組,數組元素類型為Object類型,即可以存放所有類型數據。我們對ArrayList類的實例的所有的操作底層都...
摘要:模板字面量相當于格式化字符串字符串用兩個包含起來并且內部的占位符用標識一般用于標識多行文本或者配合函數使用與箭頭函數用于數組是用于讓數組每一個元素都調用函數的語法基本格式為其中為數組元素下標為當前元素所屬的數組對象在實際調用時只需要箭頭函數 1.模板字面量相當于格式化字符串,字符串用兩個``包含起來,并且內部的占位符用${variable}標識.一般用于標識多行文本或者配合函數使用. ...
閱讀 2000·2023-04-26 01:41
閱讀 2499·2021-11-24 09:39
閱讀 1938·2021-11-24 09:38
閱讀 1967·2021-11-19 09:40
閱讀 3787·2021-11-11 11:02
閱讀 3309·2021-10-20 13:48
閱讀 3200·2021-10-14 09:43
閱讀 4428·2021-09-02 15:11