js高階之物件的基本知識

2021-09-24 18:02:55 字數 4064 閱讀 8239

物件是一種特殊的資料結構,是對事物特徵特和行為的抽象,包括屬性和方法

1、基本方法建立

var stu=,

hobby:['singe','dance'],

eat:function()

}console.log(stu.name+' '+stu.age+' '+stu.score.chinese);

stu.eat();

2、工廠方法  

var product=function(title,price)}}

var pro1=new product('電腦',5000);

var pro2=new product('手機',1800);

pro1.buy();

pro2.buy();

// 此時記憶體位址不相等,結果為false

console.log(pro1.buy==pro2.buy);

3、建構函式方式 

function person(name,***);}/*

例項化物件步驟

(1)建立空物件

(2)this指向的是當前的例項化物件

(3)執行建構函式**

*/var person1=new person('li','男');

var person2=new person('hu','女');

person1.eat();

person2.eat();

// 此時記憶體位址不相等,結果為false

console.log(person1.eat==person2.eat);

4、建構函式+原型方式(通常使用)

function car(name,price)

car.prototype.drive=function()

var car1=new car('碰碰車',1000);

var car2=new car('單車',500);

// 此時記憶體位址相等,結果為true

console.log(car1.drive==car2.drive);

1、什麼是原型(prototype)每乙個建構函式,都有乙個prototype屬性,這個屬性是乙個指標,指向乙個物件,這個物件的用途可以包含由建構函式而建立的那個物件例項的原型物件。prototype就是通過呼叫建構函式而建立的那個物件例項的原型物件。該物件的屬性和方法都能夠被建構函式的例項繼承。

2、原型鏈?

原型鏈:當從乙個物件那裡調取屬性或者方法時,如果該物件自身不存在這樣的屬性或方法,就會去自己關聯的prototype物件那裡尋找,如果property沒有,就回去prototype關聯的前輩prototype那裡尋找,如果再沒有則繼續查詢prototype.prototype引用的物件,以此類推,直到prototype.···.prototype為undefined,從而形成了所謂的原型鏈。

object是頂層物件,所以物件都繼承自他

object的prototype就是undefined

3、判斷 例項物件a 是否是 建構函式b 的例項化物件

(1)a.constructor==b 不推薦使用,重寫prototype中方法時可能會丟失constructor屬性

(2)a instanceof b 推薦使用

console.log(car1.constructor==car);

console.log(car1 instanceof car);

4、重寫原型中的方法的兩種方式(1)建構函式名.prototype.方法名=function(){}

此時相當於在原型中改寫了drive方法,新增了buy方法,constructoe屬性也還在

car.prototype.drive=function()

car.prototype.buy=function()

console.log(car.prototype);

console.log(car.prototype.constructor);

var car3=new car('賓士',100000);

car3.drive();

(2)建構函式名.prototype=,

函式名:function(){}

}此時相當於給prototype物件重新賦值,相當於裡面所有的東西都被清掉了,constructor屬性丟失

car.prototype=,

buy:function()

}console.log(car.prototype);

console.log(car.prototype.constructor);

var car3=new car('賓士',100000);

car3.drive();

car3.buy();

5、判斷 屬性b 是 物件a 的自有屬性還是繼承屬性 a.hasownproperty('b')

var car4=new car('寶馬',200000);

car4.look=function()

// 相當於給car4物件新增了dirve方法,此時物件中有了dirve方法,就不會到prototype中繼承drive方法了

car4.drive=function()

console.log(car4.hasownproperty('look'));

car4.drive();

console.log(car4.hasownproperty('drive'));

6、prototype與__proto__的關係,例項物件constructor(例項物件繼承了prototype的constructor)與建構函式的關係(兩條下劃線)例項物件的__proto__指向建構函式的prototype, 例項物件的constructor則指向建構函式

7、判斷 a物件的prototype物件 是否存在於 另乙個物件b 的原型鏈中a.prototype.isprototypeof(b)

console.log(car.prototype.isprototypeof(car4));

console.log(object.prototype.isprototypeof(car1));

8、this的指向問題(1)普通函式:this指向window

(2)事件函式:this指向事件源

(3)建構函式:this指向例項化物件

(4)基本物件:this指向當前物件

function a()

a();

btn.onclick=function()

function c(name)

var c=new c('小明');

c.printname=function();

c.printname();

console.log(car3.constructor==car);

最後是自己簡單畫的建構函式、例項化物件、prototype物件和object的關係圖

物件導向的基本知識

物件導向的三個基本特徵是 封裝 繼承 多型。封裝最好理解了。封裝是物件導向的特徵之一,是物件和類概念的主要特性。封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。物件導向程式設計 oop 語言的乙個主要功能就是 繼承 繼承是指這樣一種...

c 物件導向基本知識

新建乙個類,預設有乙個無參建構函式,如果在類中自己定義了乙個建構函式,無論有參或無參,之前預設的那個建構函式就不存在了。this 呼叫類自己的建構函式 base 呼叫父類的建構函式 乙個類只能繼承乙個類即有乙個父類,但可以被多個類繼承。private 修飾的類成員只能在當前類內部訪問。protect...

Shell指令碼之基本知識

shell指令碼 命令通過乙個程式檔案執行時,該程式被稱為shell指令碼或shell程式。shell指令碼中有一系列的命令或命令語句,這些命令 變數和流程控制語句等有機結合起來就是乙個功能強大的shell指令碼。指令碼開頭 bin bash 推薦 或 bin sh 稱為幻數,確定哪個程式來解釋指令...