javaScript的面向?qū)ο笏枷?/h2>

首先確認(rèn)一點(diǎn)javaScript不是門面向?qū)ο螅∣bject-Oriented,OO)的編程語言,原因很簡單,因?yàn)樗忻嫦驅(qū)ο螅∣O)的編程語言的一個(gè)重要的特征就是有類的概念,還有經(jīng)由類創(chuàng)造出來的對(duì)象,以及有封裝、繼承、多態(tài)三個(gè)特征,例如Java編程語言。而js語言中并沒有類的概念,雖然有對(duì)象的概念,但是這里對(duì)象不是經(jīng)由類來創(chuàng)造的,而是由構(gòu)造函數(shù)所創(chuàng)造的。js語言雖然不是一門面向?qū)ο螅∣O)的語言但是它里面運(yùn)用到了面向?qū)ο蟮木幊趟枷雭碇笇?dǎo)其代碼的書寫,所有說javaScript是一門基于面向?qū)ο蟮木幊陶Z言。

一、js創(chuàng)建對(duì)象的的三種常見方法
1、字面量方法創(chuàng)建對(duì)象
這種方法的優(yōu)點(diǎn):快捷、直觀、方便
缺點(diǎn):需要?jiǎng)?chuàng)建多個(gè)對(duì)象時(shí),代碼冗余
<script type="text/javascript">
var per ={
name: 'xiaoQuan',
age: 18,
sayHi: function () {
alert("hello");
}
};
</script>

2、工廠方法創(chuàng)建對(duì)象
這種方法的優(yōu)點(diǎn):解決了代碼冗余的問題
缺點(diǎn):無法區(qū)分該對(duì)象的類型(如:系統(tǒng)類型,如number是Number()創(chuàng)建的,但是自定
義類型無法獲取到)
<script type="text/javascript">
//工廠模式:通過調(diào)用工廠給工廠傳參,則該工廠就能批量生產(chǎn)對(duì)應(yīng)的產(chǎn)品。
//定義創(chuàng)建對(duì)象的工廠
function createPerson(name,age){
//1、創(chuàng)建空對(duì)象
var per ={};
//2、給空對(duì)象添加屬性和方法
per.name=name;
per.age=age;
per.sayHi=function(){
alert("hello");
};
return per;
};
var per1=createPerson("xiaoQuan",18);
</script>

3、構(gòu)造函數(shù)創(chuàng)建對(duì)象的方法
這種方法的優(yōu)點(diǎn):解決了獲取對(duì)象類型的問題,使用構(gòu)造函數(shù)創(chuàng)建的對(duì)象自帶一個(gè)constructor,通過該屬
性獲取 對(duì)象的類型(還可以使用instanceof檢測對(duì)象是那個(gè)一個(gè)類型的實(shí)例:(person
instanceof Person),返回一個(gè)布爾值 )
缺點(diǎn):內(nèi)存占用有點(diǎn)大
<script type="text/javascript">
//構(gòu)造函數(shù)名字母大寫(非強(qiáng)制要求,僅僅是一種書寫規(guī)范)
function Createperson(name,age){
//把所有的屬性和方法掛載在this指針上,將來this指向誰,這些屬性和方法就添加在誰身上
this.name=name;
this.age=age;
this.sayHi=function(){
alert(this.name+'hello');
}
}
//調(diào)用構(gòu)造函數(shù)創(chuàng)建對(duì)象
//new+構(gòu)造函數(shù)名
//new:通過new關(guān)鍵字調(diào)用的函數(shù),然后把構(gòu)造函數(shù)中的this指針綁定的屬性、方法也就添加了這塊存儲(chǔ)空間中。最后把存儲(chǔ)空間的地址給per對(duì)象保存
//通過構(gòu)造函數(shù)創(chuàng)建出來的對(duì)象可以借助相關(guān)方法判斷歸屬關(guān)系。
var per =new Createperson('xiaoQuan',18);
</script>

4、對(duì)象中的屬性和方法的操作
<script type="text/javascript">
var per1 = {
name: "老張",
age: 30
}
//遍歷per1對(duì)象中所有的屬性將其賦給per2對(duì)象
var per2 = {};
for(var item in per1) {
per2[item] = per1[item];
}
per2.name = '小全';
console.log(per1.name);
per2.gender = 'man';
console.log(per2.gender);
per2.jiangKe = function () {
alert('上課');
}
// 刪除對(duì)象中的屬性或方法
delete per2.name;
console.log(per2.name);
var num1 = 12;
var num2 = 23;
var sum = num1 + num2;
function CreateSumObj(num1, num2) {
this.num1 = num1;
this.num2 = num2;
this.sumFn = function () {
return this.num1 + this.num2;
}
}
</script>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容