1.什么是原型鏈一汽?
每個構造函數(shù)都有原型對象;每個對象都會有構造函數(shù)碳锈;每個構造函數(shù)的原型都是一個對象顽冶;那么這個原型對象也會有構造函數(shù);那么這個原型對象的構造函數(shù)也會有原型對象售碳;這樣就會形成一個鏈式的結構强重,稱為原型鏈。
2.原型鏈結構的基本形式
function Person(name){
this.name = name;
}
var p = new Person();
//p ---> Person.prototype --->Object.prototype---->null
3.屬性搜索原則:
a.當訪問一個對象的成員的時候贸人,會現(xiàn)在自身找有沒有,如果找到直接使用间景,
b.如果沒有找到,則去當前對象的原型對象中去查找艺智,如果找到了直接使用倘要,
c.如果沒有找到,繼續(xù)找原型對象的原型對象十拣,如果找到了封拧,直接使用
d.如果沒有找到,則繼續(xù)向上查找夭问,直到Object.prototype泽西,如果還是沒有,就報錯
4.原型繼承概念
通過修改原型鏈結構實現(xiàn)的繼承缰趋,就叫做原型繼承捧杉。
5.復雜的原型鏈
//動物--->人---->老師---->壞老師
function Animal(){
this.gender = "male";
}
Human.prototype = new Animal();
Human.prototype.constructor = Human;
function Human(){
this.actionWay = "走路";
}
Teacher.prototype = new Human();
Teacher.prototype.constructor = Teacher;
function Teacher(){
this.skill = "教書";
}
BadTeacher.prototype = new Teacher();
BadTeacher.prototype.constructor = BadTeacher;
function BadTeacher(){
this.name = "呂超";
}
var t = new BadTeacher();
console.log(t);
6.Object.prototype的成員
①.constructor:
原型對象內(nèi)的一個屬性,指向該原型對象相關聯(lián)的構造函數(shù)埠胖。
②.hasOwnProperty:
一個方法糠溜,用來判斷對象本身(不包含原型)是否擁有某個屬性。
function Person(){
this.name = "王九"
}
Person.prototype.name = "張三";
var p = new Person();
console.log(p.name);
console.log(p.hasOwnProperty("__proto__"));
③.propertyIsEnumerable:
a. 判斷屬性是否屬于對象本身
b. 判斷屬性是否可以被遍歷
console.log(p.propertyIsEnumerable("name"));
④.將對象轉(zhuǎn)換成字符串
var o = {};
console.log(o.toString());
console.log(o.toLocaleString());
var now = new Date();
console.log(now.toString());
console.log(now.toLocaleString());
⑤.valueOf:
獲取當前對象的值
function Person(){
}
var p = new Person();
//在對象參與運算的時候
//1.默認的會先去調(diào)用對象的valueOf方法直撤,
//2.如果valueOf獲取到的值非竿,無法進行運算 ,就去去調(diào)用p的toString方法 最終做的就是字符串拼接的工作
console.log( 1 + p);
⑥ _proto_:
a.原型對象對象中的屬性
b.可以使用 對象._proto_去訪問原型對象