// function f1(){
// console.log(this)
// }
// f1() //window
// f2 = new f1; //f1{}
// f1() //window
構造函數
構造函數本事是普通函數,當我們用new關鍵字調用時,能實現某類功能,我們才把它稱呼為構造函數。
所以構造函數的核心就是關鍵字new .
構造函數(new)
當任意一個普通函數用於創建一類對象,並且通過new操作符來調用時,它就可以作為構造函數
作用:構造新對象,設置對象的屬性和方法.(構造函數里面寫一堆this的作用)
ECMAScript提供了多個內置構造函數,如 Object、Array、String、Boolean、Number、Date…等等。
var obj = new Object();
var arr = new Array();
用new調用函數的執行過程
new
* 一元運算符,后面只能跟函數,用來調用函數
*
* 調用函數的方式
* 1、new 函數名 ( 沒有參數的情況下用這種方式 )
* 2、new 函數名()
用new調用函數的執行過程
簡單來說,new調用一個函數,執行了該函數,然后返回一個對象(用變量接收這個對象) 。
function f1(){
console.log(this)
}
f1() //window(普通函數)
new f1; //f1{} 和new f1()效果一樣 由new運行,稱為構造函數,改變了 this指向
f1() //window ,沒用new運行,還是普通函數
* 1、自動創建一個空對象
* 2、把函數內部的this指向創建的這個對象(也就是構造函數的作用,構造新對象,設置對象的屬性和方法(構造函數里面寫那么多this的作用))
* 3、在函數執行完成以后自動返回創建的那個對象,即使函數里面沒有return
函數里有return
(1、return的是對象
返回這個對象
2、return的是非對象
返回自動創建的那個對象 )
* 注意:
* 1、用new調用的函數,得到的永遠是一個對象,不管函數有沒有返回值
* 2、使用new調用函數,這個函數就是一個用來創建對象的函數(構造函數)
*/
構造函數的調用其中有幾步
是:
1.創建一個新對象;
2.將構造函數的作用域賦給新對象(因此this就指向了這個新對象);
3.執行構造函數中的代碼;
4.返回新對象;