文章目錄
一:使用工廠方法創(chuàng)建對象
1:原始寫法
2:工廠方式
3:結(jié)果驗證?
二:構(gòu)造函數(shù)
1:什么是構(gòu)造函數(shù)
2:構(gòu)造函數(shù)和普通函數(shù)的區(qū)別
3:構(gòu)造函數(shù)的執(zhí)行流程
三:類
1:什么是類
2:如何檢查一個對象是否是個類的實例
3:Object的地位
四:構(gòu)造函數(shù)修改
1:重大問題
2:如何改造
一:使用工廠方法創(chuàng)建對象
1:原始寫法
var obj = {
name: "孫悟空",
age:18,
gender:"男"
sayName:function (){
alert(this.name)
}
}
obj.sayName();//孫悟空
var obj2 = {
name: "豬八戒",
age:18,
gender:"男"
sayName:function (){
alert(this.name)
}
}
var obj2 = {
name: "沙和尚",
age:18,
gender:"男"
sayName:function (){
alert(this.name)
}
}
? ? ? ? 這種頻繁創(chuàng)建對象沒有問題,但是太繁瑣了。我們可以使用工廠方式創(chuàng)建對象。
2:工廠方式
//使用工廠方法創(chuàng)建對象
function createPerson(name,age,gender){
//創(chuàng)建一個對象
var obj = new Object();
obj.name = name;
obj.age = age;
obj.gender = gender;
obj.sayName = function(){
alert(this.name);
}
return obj;
}
var obj = createPersion('孫悟空',19,'男');
console.log(obj.sayName());
3:結(jié)果驗證?
? ? ? ? 使用工廠方法創(chuàng)建的對象,使用的構(gòu)造函數(shù)都是Object,所以創(chuàng)建的對象都是Object的類型。?這就導致我們無法區(qū)分多種不同類型的對象。
二:構(gòu)造函數(shù)
1:什么是構(gòu)造函數(shù)
? ? ? ? 我們創(chuàng)建狗對象和人對象,都是通過new Object()創(chuàng)建的對象?,F(xiàn)在我們想?yún)^(qū)分一下類型。就比如,我們特別想new Person()這樣的構(gòu)造函數(shù),或者new Dog()這樣的構(gòu)造函數(shù),但是事實證明這樣一運行就報錯了。Person is? not defined
2:構(gòu)造函數(shù)和普通函數(shù)的區(qū)別
????????這里邊我們就可以創(chuàng)建一個構(gòu)造函數(shù),專門創(chuàng)建一個Person對象。構(gòu)造函數(shù)就是一個普通函數(shù)。創(chuàng)建方式和普通方式?jīng)]有區(qū)別,但是構(gòu)造函數(shù)習慣上首字母大寫。
????????構(gòu)造函數(shù)和普通函數(shù)的區(qū)別就是調(diào)用方式不同,普通函數(shù)是直接調(diào)用,而構(gòu)造函數(shù)需要使用new關鍵字進行調(diào)用。
function Person(){
}
var per = new Person();
? ? ? ? 調(diào)用時候,加new是構(gòu)造函數(shù)的調(diào)用方式。不加new是普通函數(shù)的執(zhí)行流程
3:構(gòu)造函數(shù)的執(zhí)行流程
function Person(name,age,gender){
this.name = name;
this.age = age;
this.gender = gender;
}
var per = new Person("孫悟空",18,'男');
console.log(per);
1: 調(diào)用構(gòu)造函數(shù)立刻創(chuàng)建一個對象
2:將新建的對象設置為函數(shù)中的this,在構(gòu)造函數(shù)中,可以使用this來引用新創(chuàng)建的對象。
3:逐行執(zhí)行函數(shù)中的代碼
4:將對象作為返回值進行返回,這就是構(gòu)造函數(shù)神奇的地方,沒有返回語句,卻可以返回創(chuàng)建對象。
三:類
1:什么是類
? ? ? ? ?什么是類?構(gòu)造函數(shù)就是類。
2:如何檢查一個對象是否是個類的實例
function Person(name,age,gender){
this.name = name;
this.age = age;
this.gender = gender;
}
var per = new Person("孫悟空",18,'男');
console.log(per);
console.log(per instanceof Person)
結(jié)果驗證:?
3:Object的地位
? ? ? ? 所以的對象都是Object的后代,所以所有對象instanceof Object都是true。
四:構(gòu)造函數(shù)修改
1:重大問題
//使用工廠方法創(chuàng)建對象
function createPerson(name,age,gender){
//創(chuàng)建一個對象
var obj = new Object();
obj.name = name;
obj.age = age;
obj.gender = gender;
obj.sayName = function(){
alert(this.name);
}
return obj;
}
var obj = createPersion('孫悟空',19,'男');
var obj1 = createPersion('孫悟空',19,'男');
var obj2 = createPersion('孫悟空',19,'男');
? ? ? ? obj與obj1與obj2之間的三個對象之間都有這個sayName函數(shù)對象,并且地址不相等。
2:如何改造
? ? ? ? 將sayName方法在全局作用域中進行定義。文章來源:http://www.zghlxwxcb.cn/news/detail-717622.html
function fun (){
alert(this.name);
}
//使用工廠方法創(chuàng)建對象
function createPerson(name,age,gender){
//創(chuàng)建一個對象
var obj = new Object();
obj.name = name;
obj.age = age;
obj.gender = gender;
obj.sayName = fun;
return obj;
}
var obj = createPersion('孫悟空',19,'男');
var obj1 = createPersion('孫悟空',19,'男');
var obj2 = createPersion('孫悟空',19,'男');
? ? ? ? 這樣構(gòu)造函數(shù)執(zhí)行一萬次,最終的函數(shù)對象都只有一個。文章來源地址http://www.zghlxwxcb.cn/news/detail-717622.html
到了這里,關于JavaScript系列從入門到精通系列第二十篇:使用工廠方法創(chuàng)建JavaScript對象,JavaScript構(gòu)造函數(shù)詳解,JavaScript類概念的介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!