JavaScript學習第十天筆記(繼承)

2021-09-13 13:12:12 字數 2031 閱讀 4773

如果建構函式或物件a的原型指向建構函式或物件b,b的原型再指向建構函式或物件c,以此類推,最終的建構函式或物件的原型指向object的原型。由此形成了一條鏈狀結構,被稱之為原型鏈。按照上述的描述,在b中定義的屬性或方法,可以在a中使用並不需要定義。這就是繼承,它允許每個物件來訪問其原型鏈上的任何屬性或方法。在js語言中,原型鏈是繼承的預設產生方式。

//原型鏈

function a()

//通過建構函式建立物件

var a = new a();

function b()

//將b的原型指向a

b.prototype = a ;

var b =new b();

console .log(b.a);//a

console .log(b.b);//b

function c()

//將c的原型指向b

c.prototype = b;

var c= new c();

/*console .log(物件.屬性)*/

console .log(c.c);//c

console .log(c.b);//b

console .log(c.a);//a

出於對效率的考慮,盡可能地將屬性和方法加到原型上,可以採用以下方式:

1.不要為繼承關係單獨建立新物件。

2.儘量減少執行時的方法搜尋。

//原型鏈

function a()

a.prototype.a='a';//將自有屬性改寫為原型屬性

function b()

b.prototype=a.prototype; //將b的原型屬性指向a的原型屬性

b.prototype.b = 'b';

function c()

c.prototype = b.prototype;

var c = new c;

console .log(c.c);

console .log(c.b);

console .log(c.a);

原型鏈雖然強大,用它可以實現js中的繼承,但同時也存在一些問題。

1.原型鏈實際上是在多個建構函式或物件之間共享屬性和方法。

2.建立子類的物件時,不能向父級的建構函式傳遞任何引數。

所以,在實際開發中,很少會單獨使用原型鏈。

所謂原型式繼承,就是定義乙個函式,該函式中建立乙個歷史性的建構函式,將作為引數傳入的物件作為這個建構函式的原型,最後返回這個建構函式的實現物件。

/*

定義乙個函式 - 用於實現物件之間的繼承

* 引數

* obj - 表示繼承關係中的父級物件

* prop - 物件格式,表示繼承關係中的子級物件的屬性和方法

*/function fn(obj, porp)

}// 將函式的引數作為建構函式的原型

fun.prototype = obj;

// 將建構函式建立的物件進行返回

return new fun();

}var obj =

// 呼叫函式

var result = fn(obj,

});console.log(result.age);

result.sayme();

var obj = 

var newobj = object.create(obj, ,

sayme :

}});console.log(newobj.age);

newobj.sayme();

在子級中呼叫父級元素的屬性

// 定義父級物件的建構函式

function parent()

// 定義子級物件的建構函式

function child()

// 建立子級物件

var child = new child();

console.log(child);

學習第十天

一 介面 jdk1.8及之後新增了2中可以定義存在方法體的方法 預設方法 default關鍵字修飾的方法 使用 通過實現類物件使用 靜態方法 使用 通過介面名去呼叫 二 單例模式 保證類只能存在乙個例項 餓漢式 先建立物件,然後需要的人要這個物件,保證永遠使用的都是這個建立好的物件 執行緒安全的,效...

python學習第十天

class student count 0 def init self,name,age,address self.name name self.age age self.address address student.count 1 k print k w open a.txt w encodin...

菜鳥學習第十天

1.字串最大的特點 一旦初始化就不可以改變。不可改變的字串內容而不是指向字串的引用 2.string s abc 其中s是乙個類型別變數,abc 是乙個物件。3.string s1 abc 和string s2 new string abc s1 s2 和s1.equals s2 比較的是他們在記憶...