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

2022-09-08 04:57:10 字數 4030 閱讀 9100

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

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 new fn();

}var obj =

}var newobj = object(obj);

newobj.name = 'john';

console.log(newobj.name); // john

newobj.sayname(); // john

return clone; // 返回這個物件

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

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 new fn();

}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 數字型別 ...