繼承第二節 原型繼承和Es6繼承
阿新 • • 發佈:2018-11-05
原型繼承主要是繼承*父類原型上的*屬性或者方法。
1.建立一個空的建構函式 2.把空建構函式的原型等於父類的原型 3.把子類的原型等於空建構函式的例項物件
這樣就達到了繼承屬性的目的(主要注意:手動修正constructor指向)
function Person(name,age){ this.name = name; this.age = age; } Person.prototype.say = function(){ alert('我的名字'+this.name); } Person.prototype.runingfunction Xhh(){}; Xhh.prototype = Person.prototype; Coder.prototype=new Xhh; Coder.prototype.constructor = Coder;//手動改變this的指向 let c = new Coder('a',26,'超級碼農'); console.log(c);//此時c繼承了Person的方法= function(){ alert('我會跑'); } function Coder(name,age,job){ Person.call(this,name,age); this.job = job; }
Es6繼承
class 類 ES6給我們提供了class的語法糖,可以通過class來建立類具體語法 class 類名 { constructor(形參){ //構造方法 } 方法名(){ } 此處是不加,號的 方法名(){ } 定義方法: (1)動態方法:(例項使用的方法) 這樣的寫法就等同於把方法掛在類的原型上了 方法名(){ } (2)靜態方法:(類使用的方法) static 方法名(){ }
例如:
class Person { constructor(name,age){ this.name = name; this.age = age; } say(){ console.log('我的名字是'+this.name,'今年'+this.age); } } /* 宣告子類 extends 父類名 就繼承父類了 */ class Coder extends Person { /* 在子類constructor中新增屬性的小技巧 專屬於子類的屬性寫在引數的前面,父類的屬性放在後面 這樣一來,就能直接使用...arg ...arg 把函式中的多餘的引數放入陣列中體現出來。 */ constructor(job,...arg){ // console.log(this) super(...arg); //等同於呼叫父類,把多餘的引數(和父類一樣的屬性)放到super中,達到繼承父類屬性的目的 /* 在繼承裡,寫constructor必須寫super super下面才能使用this,super有暫存死區(super上面不能使用this,用了就報錯) */ this.job = job;//自己私有的屬性,直接this點即可 console.log(arg); } codeing(){ console.log('敲程式碼'); } say(){ console.log('哈哈'); } } let c = new Coder('前端','a',20); let p = new Person('小明',30); console.log(c); // c.say(); // p.say(); // c.codeing();