Unit11 物件導向 原型

2022-09-02 12:15:13 字數 4060 閱讀 8145

回顧:

物件導向3特點:封裝,繼承,多型;

封裝:將描述同乙個東西的屬性和方法,定義在乙個物件裡;

繼承:父物件的屬性和方法,子物件可以直接使用;

多型:同一物件,在不同情況下,呈現不同的狀態;

過載:同一方法名,傳入引數不同,執行不同操作;

重寫:子物件覺得父物件的成員不好用,可以自己定義乙個,覆蓋父物件的成員;

- 封裝: 如何建立自定義物件;

1. 直接量:__proto__指向object.prototype

var obj=

};2.new關鍵字:

var obj=new object();

obj.屬性名=值1;

obj.方法名=function();

3.利用建構函式 反覆 建立 "相同結構" 的物件;

建構函式:描述一類物件結構的特殊函式;

2步:1.定義建構函式:

function 建構函式名|型別名(屬性引數1,...);}}

2.利用建構函式建立物件:

var obj=new 建構函式名|型別名(屬性引數1,...)

new:

1.建立乙個空物件;new obj={};

2.利用空物件呼叫建構函式;

建構函式在空物件中新增屬性和方法;

3.設定新物件的__proto__屬性指向建構函式的原型物件;**********

4.返回新物件的位址;

4.object.create(父物件,)

this: 僅和呼叫時使用的物件有關!

所有無主的(不用var 賦值的變數,匿名函式)都是window的;

- 原型,原型鏈,繼承:

原型:儲存所有子物件的屬性和方法;

所有函式都有prototype,指向自己的原型物件;

所有物件都有__proto__,指向自己父級原型物件;

所有原型物件都有constructor,指向原型對應的建構函式;

object.prototype 是所有物件的祖宗;

原型鏈:所有父子級物件間由__proto__形成的多級引用關係;

多級 繼承;

1.判斷自有屬性和共有屬性:

1.判斷自有屬性:obj.hasownproperty("屬性名");

2.判斷原型鏈上的屬性:2種;

判斷不包含:

if(!("屬性名"in obj))

if(obj."屬性名"===undefined)

if(!obj."屬性名")

3.判斷共有:兩個條件;

(!obj.hasownproperty("屬性名"))&&("屬性名"in obj);

- 獲得任意物件的父級原型物件:

object.getprototypeof(子物件);

==>子物件.__proto__;

- 檢查物件的原型:

父物件.isprototypeof(子物件);

判斷乙個prototype物件是否存在另乙個物件的原型鏈中;

- 判斷是不是陣列:

array.isarray();true

array.isarray({});false ie8不支援,在建構函式裡;

1. 如果array.prototype在obj的原型鏈中

return array.prototype.isprototypeof(obj);

2. instanceof:

語法:obj instanceof 建構函式名

判斷obj物件是否被建構函式建立

return obj instanceof array;

例項:乙個建構函式建立出的每個具體物件

3. 原型物件的constructor屬性                 ***僅判斷直接父級

return obj.constructor==array;

4. 利用當前物件,強行呼叫object原型的tostring方法

object.prototype.tostring.call(obj);==>執行的一瞬間相當於:obj.tostring();

==[object array]

call,在呼叫方法的一瞬間更換呼叫方法的物件*/

1.繼承

why:**重用;節省空間;

1.直接繼承物件:想方設法修改物件的__proto__;3種;

1.僅「修改」乙個物件的__proto__;

object.setprototypeof(子物件,父物件);

2.通過修改建構函式的原型物件,實現批量修改後續子物件的繼承關係。

建構函式.prototype=父物件;(影響出現的位置 後面的物件)

**僅影響之後建立的物件的繼承關係;

之前建立的物件依然繼承舊建構函式的原型物件;

重寫:hmm.tostring=function(){};

擴充套件:hmm.sing=functon(){};

3.object.create(父物件[,])

- 建立空物件

- 繼承新的物件中的屬性

- 重寫 擴充套件

例子:var hmm=object.create(father,

,

sname:,

age:,

intrself:

}

);

2.僅繼承結構

function 父型別建構函式(屬性引數1,屬性引數2)

function 子型別建構函式(屬性引數1,屬性引數2,屬性引數3)

var obj=new 子型別建構函式(值1,值2,值3);

如何轉殖乙個物件?

【案例】

1.    /*定義乙個建構函式包含所有飛行物的屬性*/

function flyer(fname,speed)}}

/*再定義乙個飛機建構函式,除包含飛行物的所有屬性外,還擴充套件容量屬性*/

function plane(fname,speed,capacity)}}

var a380=new plane("a380",1800,555);

//__proto__-->plane.prototype

//1. 建立空物件:

//2. 呼叫plane()

//     先呼叫flyer建構函式

//     再新增capacity屬性

a380.fly();

2.    function student(sname,age)}}

var father=;

var lilei=new student("li lei",19);

//step1: 建立物件

//var hmm=new student("han meimei",18);

//step2: 繼承父物件

var hmm=object.create(father,

,sname:,

age:,

intrself:});

//step3:

/*重寫*/

function intrself()

function tostring()";

}/*console.log(lilei.tostring());

console.log(hmm.tostring());*/

/*擴充套件*/

function sing()

console.log(hmm.sing());

console.log(hmm.intrself());

hmm.age=19;

console.log(hmm.intrself());

//hmm.__proto__=father;

李雷的自我介紹

韓梅梅的自我介紹

unit11 管理文件

unit11 管理文件 一,ip 基礎知識 1,ipv4 2進製32位 10進製 172.25.0.10 252.255.255.0 255.255.255.0 子網掩碼 子網掩碼255位對應的ip位為網路位 子網掩碼0 位對應的ip位為主機位 二,配置ip 圖形化 1,圖形介面 nm connec...

unit11 網路管理

unit11.管理網路 1.ip基礎知識 1.ipv4 2進製32位 10進製 172.25.0.10 255.255.255.0 172.25.0.10 ip位址 255.255.255.0 子網掩碼 子網掩碼255位對應的ip位為網路位 子網掩碼0對應的ip位為主機位 2.配置ip 1.圖形介面...

linux基礎unit11 管理網路

unit11 管理網路 1.ip基礎知識 ipv4 2進製32位 172.25.0.10 255.255.255.0 255.255.255.0 子網掩碼 子網掩碼255位對應的ip位為網路位 子網掩碼0對應的ip位為主機位 2.配置ip 圖形化 1 圖形介面 nm connection edito...