在es6之前,js的函式和物件是混在一起的,通過new呼叫函式,就是把函式當作物件,建立例項。
funciton person(name,age)
person.prototype.getname = function()
person.prototype.setname = function(name)
var p = new person('張三',13)
p.setname('***')
var name = p.getname()
1)屬性定義在函式中,每個例項物件不同
2)方法定義在原型上,例項物件共享
es6引入了class、constructor可以明確定義類
class person()
getname()
setname(name)
}
使用class關鍵字定義類,屬性定義在constructor中,方法定義在類中
es5中繼承是借用了父類建構函式和原型實現的
/*student 繼承 person*/
function student(name,age,lev)
sub.prototype = object.create(super.prototype);
student.prototype.constructor = student
1)首先在子類中呼叫了父類的建構函式,並繫結為子類的this,這樣讓子類例項可以得到父類例項的屬性
2)讓子類的原型指向父類的原型,讓子類例項可以擁有父類原型上定義的方法
3)修正原型的constructor為子類建構函式
也可以這樣繼承原型:student.prototype = new person()
,這樣繼承的原型"不乾淨",不僅繼承到父類原型上的方法,也繼承了父類例項的方法。
function person()
}
es6中class定義的類,可以通過extends實現繼承,使用super呼叫父類建構函式,比es5繼承方便的多
class student
getlev()
}
細節詳情參見:es6-class繼承 ES5和ES6的繼承
建構函式 function obj uname,age 建立例項物件 var test newobj uname 18 使用方法 test.method obj.boy 建構函式名字的首字母要大寫,且與new一起使用 建構函式中的屬性方法被叫做成員。其中 1 靜態成員 在建構函式本身上新增的成員,如...
ES5和ES6的繼承
es5繼承 建構函式 原型和例項的關係 每乙個建構函式都有乙個原型物件,每乙個原型物件都有乙個指向建構函式的指標,而每乙個例項都包含乙個指向原型物件的內部指標,1 function supertype 4 supertype.prototype.getsupervalue function 7 fu...
es5繼承與es6繼承
es5中的繼承方式 1.原型鏈繼承 缺點 1.建立例項時無法像父類建構函式傳遞引數 2.因為指定了原型,所以不能實現多繼承 3.父類建構函式上的屬性被所有子類共用,給原型上的屬性賦值會改變其他子類的屬性值 es5 const parent function name,age parent.proto...