先不管上圖,先來看以下**:
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); //student1 是 student, person, object 三者中任意乙個型別的例項。true
console.log(student1 instanceof person); //
true
console.log(student1 instanceof object); //
true
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 數字型別 ...