如何: js中繼承都是通過原型對象實現的
什么是原型對象: 集中存儲同一類型的所有子對象,共用成員的父對象
如何:
創建: 不用創建,買一贈一
每創建一個構造函數,都附贈一個原型對象
繼承: 在創建子對象時,new的第2步自動設置子對象繼承構造函數的原型對象
訪問成員: 優先訪問私有成員
自己沒有,就去父對象(原型對象)中查找
將成員添加到原型對象中:
構造函數.prototype.成員=值
私有屬性和公有屬性:
私有屬性: 保存在當前對象本地,僅歸當前對象獨有的屬性
公有屬性: 保存在父對象中,所有子對象共有的屬性
讀取屬性值: 子對象.屬性
修改屬性值: 私有屬性,必須通過子對象自己修改
公有屬性,只能用原型對象修改!
原型鏈:
什么是: 由多級父對象逐級繼承,形成的鏈式結構,通過__proto__實現子類共用原型鏈上的屬性和方法,向上查找
原型鏈的運行機制:
1. 所有的函數數據類型都天生自帶一個屬性:prototype(原型),這個屬性的值是一個對象,瀏覽器會默認給它開辟一個堆內存
2. 在瀏覽器給prototype開辟的堆內存中有一個天生自帶的屬性:constructor,這個屬性存儲的值是當前函數本身
3. 每一個對象都有一個__proto__的屬性,這個屬性指向當前實例所屬類的prototype(如果不能確定它是誰的實例,都是Object的實例)
function Student(sname,sage){ this.sname=sname; this.sage=sage; } Student.prototype.intr=function(){ console.log("I'm "+this.sname+", I'm "+this.sage); } var lilei=new Student("Li Lei",11); var hmm=new Student("Han Meimei",12); console.log(lilei); console.log(hmm); lilei.intr(); hmm.intr();
