繼承(學習筆記) 《高階教程》

2022-08-30 03:45:09 字數 3764 閱讀 6760

先不管上圖,先來看以下**:

function

person()

person.prototype.saypersonname = function

()

function

student()

student.prototype = new person(); //

student 的原型物件替換為 person 的例項物件 參考上圖中右邊第一條紅線

student.prototype.saystudentname = function

() var student1 = new

student();

student1.saypersonname();

//person

student1.saystudentname(); //

student

結合**和上圖,可以清楚得看到,將某個建構函式的原型物件替換為另乙個建構函式的例項物件後,最終的指向(圖中紅線部分,就像鏈條一樣,層層鏈結)。這就是原型鏈的基本概念。

所有引用型別預設都繼承了 object,這也是通過原型鏈實現的。

instanceof

console.log(student1 instanceof student); //

true

console.log(student1 instanceof person); //

true

console.log(student1 instanceof object); //

true

student1 是 student, person, object 三者中任意乙個型別的例項。

isprototypeof()

console.log(student.prototype.isprototypeof(student1)); //

true

console.log(person.prototype.isprototypeof(student1)); //

true

console.log(object.prototype.isprototypeof(student1)); //

true

在子型別建構函式的內部借用超型別建構函式。

function

person()

function

student()

var student1 = new

student();

student1.friends.push('lucy');

console.log(student1.friends);

//["mike", "lily", "melinda", "lucy"]

var student2 = new

student();

console.log(student2.friends);

//["mike", "lily", "melinda"]

優點:可以傳遞引數。

function person(name) 

function

student(name)

var student1 = new student('john');

console.log(student1.name);

//john

var student2 = new student('gray');

console.log(student2.name);

//gray

缺點原型鏈和借用建構函式的組合

function

person(name)

person.prototype.sayname = function

() function

student(name, age)

student.prototype = new

person();

student.prototype.constructor =student;

student.prototype.sayage = function

() var student1 = new student('mike', 28);

student1.sayname();

//mike

student1.sayage(); //

28

借助原型基於已有的物件建立新物件。

function

object(obj)

fn.prototype =obj;

return

newfn();

}var obj =

}var newobj =object(obj);

newobj.name = 'john';

console.log(newobj.name);

//john

newobj.sayname(); //

john

返回這個物件

}組合繼承的缺點:呼叫兩次超型別建構函式。

function

person(name)

person.prototype.sayname = function

() function

student(name, age)

student.prototype = new person(); //

student.prototype.constructor =student;

student.prototype.sayage = function

()

改造:

function

object(obj)

fn.prototype =obj;

return

newfn();

}function inheritprototype(subtype, supertype)

function

person(name)

person.prototype.sayname = function

() function

student(name, age)

inheritprototype(student, person);

student.prototype.sayage = function

() var student1 = new student('mike', 28);

畫了一張關係圖,僅供參考

有理解的不對的地方,煩請指出,謝謝!!

繼承(學習筆記) 《高階教程》

先不管上圖,先來看以下 function person person.prototype.saypersonname function function student student.prototype new person student 的原型物件替換為 person 的例項物件 參考上圖中右...

php學習筆記 高階教程

var dump arr 列印陣列 print r arr 列印陣列,但不列印型別 unset arr 0 刪除陣列中第乙個元素 is array 判斷是不是陣列 sort arr 排序,從小到大,重新排序,下標不變 ksort arr 按照鍵名重新排序 大寫字母優於小寫字母 count arr 統...

《C 高階教程》學習筆記14

第二十一,二十二天 昨天咖啡喝濃了頭居然發熱了 今天繼續學習 9.1.3 格式字串 例 double d 13.45 int i 45 console.writeline d,i 常見格式說明符 c 數字型別 特點地區的貨幣值 d 只用於整數型別 一般的整數 e 數字型別 科學計數法 f 數字型別 ...