3.JS中用來創(chuàng)建對象的“構(gòu)造函數(shù)”
構(gòu)造函數(shù)創(chuàng)建對象(類):
????創(chuàng)建一個構(gòu)造函數(shù)用來創(chuàng)建(Person)對象:
????????構(gòu)造函數(shù)創(chuàng)建方式和普通函數(shù)區(qū)別是“構(gòu)造函數(shù)首字母大寫”
????????????function Person(name, age) {
????????????????this.name = name ;
????????????????this.age = age;
????????????????this. sayName = function() {
????????????????????alert(this.name);
????????????????}
????????????};
????????“普通函數(shù)”是直接調(diào)用“fun()”,而“構(gòu)造函數(shù)”需要使用“new”關(guān)鍵字來調(diào)用
? ? ? ? ? ? var per =?Person(?"小武", 18);??//?普通函數(shù)調(diào)用
? ? ????????console.log(per); ? Undefined(函數(shù)無返回值時輸出Undefined)
????????? ? var per = new?Person( "小武", 18);? // 構(gòu)建對象
????????????console.log(per); ? Object類型
????
????構(gòu)造函數(shù)的執(zhí)行流程:
????????1.立刻創(chuàng)建一個新的對象
????????2.將新建的對象設(shè)置為函數(shù)中“this”?,在構(gòu)造函數(shù)中可以使用“this”來引用新建的對象
????????3.逐行執(zhí)行函數(shù)中的代碼
????????4.將新建的對象作為返回值返回
????使用同一個構(gòu)造函數(shù)創(chuàng)建的對象,稱為一類對象,也將一個“構(gòu)造函數(shù)”稱為一個“類”
????將通過一個構(gòu)造函數(shù)創(chuàng)建的對象,稱為是該“類的實例”
this的情況:
????1.當(dāng)以函數(shù)的形式調(diào)用時,this是window
????2.當(dāng)以方法的形式調(diào)用時,誰調(diào)用方法this就是誰
????3.當(dāng)以構(gòu)造函數(shù)的形式調(diào)用時,this就是新創(chuàng)建的那個對象
類實例的檢查:
????使用“instanceof”可以檢查一個對象是否是一個類的實例
????console.log(per instanceof Person);
????所有的對象都是“Object”的后代,所以任何對象和“Object”做“instanceof”檢查時都會返回“true”