例項:通過new方式例項的物件
原型物件:prototype,在建構函式裡
建構函式和函式:不同的執行方式,this指向有所區別
function foo()
var foo = new foo();
console.log(foo);//
訪問原型的方式:function foo()
foo.prototype =
var foo = new foo();
console.log(foo.aa);//
例項後的物件.__proto__ (不推薦)
建構函式.prototype
object.getprototypeof(例項後的物件)
原型的終點:object.prototype es6
原型物件上的乙個屬性
指向物件的建構函式
定義原型的時候最好定義一下constrctor屬性
引用值共享問題
sub.prototype = new super();
沒辦法拿到原型上的方法function super()
super.prototype.say = function()
function sub()
var sub1 = new sub();//拿不到sub原型super的say方法
var sub2 = new sub();
偽經典:呼叫兩次superfunction super()
super.prototype.say = function()
function sub()
sub.prototype = new super();//sub的原型先繼承一次super的
var sub1 = new sub();//呼叫時再super.call(this)覆蓋一次屬性值
var sub2 = new sub();
sub1.a = '333';//只有sub1的a值改變了,sub2沒改,所以引用值共享問題解決
sub1.say();//222
sub2.say();//222
//原型上的方法也可以拿到了
sub.prototype如果在繼承super之前定義了方法,這些方法就會丟失function super()
super.prototype.say = function()
function sub()
= new super();
sub.prototype = object.create(super.prototype);返回乙個物件,使當前物件的原型為傳入的引數
//讓sub的原型直接為super的原型,繞過super例項化的過程
是es5的方法,es3中需要寫相容性方案
/*if(!object.create)
f.prototype = proto;
return new f();
}}*/
var sub1 = new sub();
var sub2 = new sub();
sub1.a = '333';
sub1.say();//222
sub2.say();//222
function teacher()
teacher.prototype =
var t = new teacher();
console.log(t);
function student()
function buffer(){}
buffer.prototype = teacher.prototype;
var buffer = new buffer();
student.prototype = buffer;
student.prototype.age = 18;
var s = new student();
console.log(s);
//聖杯模式
buffer將teacher.prototype進行了一層封裝,讓student不能修改teacher.prototype
語法糖
class super
class sub extends super{}
//可以不定義constrctor,會自動定義
JS 學習筆記 物件導向和類的繼承
程式設計中乙個有兩個程式設計思想,其中乙個是面向過程,另乙個是物件導向。下面分別介紹一下這兩種程式設計方式。面向過程程式設計全稱為 process oriented programming 可以簡稱為 pop。面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟逐步實現,使用的時候再依次呼叫...
js物件繼承
自有屬性 own property 物件本身具有的屬性 繼承屬性 從原型物件 prototype object 繼承而來 物件的查詢過程 查詢過程中,查詢物件o的屬性x,如果o的屬性不存在x,則對o的原型物件進行查詢,使原型鏈查詢。屬性賦值操作過程 屬性賦值過程中,先檢查原型鏈,以此判斷是否允許賦值...
JS物件 繼承
js物件定義的方法 方法一 通過var object 物件字面量 1 可以叫物件直接量來自定義乙個物件。物件自面量是乙個表示式,這個表示式的每次運算都建立並初始化乙個新物件 2 還可以換行寫,每義定乙個屬性名和值,用逗號分開,最後乙個不加逗號,加了會被忽略,但在ie中會報錯,最好不要加 方法二 通過...