繼承第一節(call繼承、拷貝繼承、寄生組合繼承)
阿新 • • 發佈:2018-11-03
1、call 繼承
類式(call)繼承(一般類式繼承是繼承屬性) 呼叫父類,通過call來改變this(把window改成子類)達到繼承屬性的目的。function Person(name,age){ this.name = name; this.age = age; } function Coder(name,age,job){ Person.call(this,name,age);//改變了this指向 this.job = job; // console.log(this);//Coder} let p = new Person('a',18); let c = new Coder('ab',16,'猿妹'); console.log(c);//這樣就繼承了Person下的一些屬性,
2、拷貝繼承
遍歷父類原型上的方法,只要是自身的就賦值給子類的原型function Person(name,age){ this.name = name; this.age = age; } Person.prototype.say = function(){ console.log('我叫'+this.name); } Person.prototype.runing = function(){ console.log('我會跑'); } function Coder(name,age,job){ Person.call(this,name,age); this.job = job; } // Coder.prototype = Person.prototype; //此時賦址了 Object.prototype.aa = 20; for(let attr in Person.prototype){ //因為in會遍歷原型,所以只有父類原型上的屬性才會賦值 if(Person.prototype.hasOwnProperty(attr)){ Coder.prototype[attr] = Person.prototype[attr]; } } Coder.prototype.runing = function(){ console.log('會騎UFO'); } let p = new Person('a',18); let c = new Coder('b',16,'前端'); c.runing(); p.runing(); console.log(Coder.prototype);//
3、
Object.create:內建Object類天生自帶的方法 1.建立一個空物件 2.讓新建立的空物件的__proto__指向第一個傳遞進來的物件function Person(name,age){ this.name = name; this.age = age; } Person.prototype.say = function(){ alert('我的名字'+this.name); } Person.prototype.runing = function(){ alert('我會跑'); } function Coder(name,age,job){ Person.call(this,name,age); this.job = job; } Coder.prototype = Object.create(Person.prototype); // Coder.prototype = Object.assign({},Person.prototype); //類似拷貝 // Object.assign(Coder.prototype,Person.prototype) Coder.prototype.say = function(){ alert('duang,duang,duang,123!~'); } let c = new Coder('a',26,'超級碼農'); let p = new Person('b',26); c.say(); p.say();