1 /** 2 * 繼承大致分爲倆種: 3 * 構造函數繼承 4 * 原型繼承 5 * - 拷貝繼承 6 * -深拷貝 7 * -淺拷貝 8 * - 原型鏈繼承 9 **/ 10 11 function Person(name,age){ 12 this.name = name; 13 this.age = age 14 } 15 Person.prototype.sayName = function(){ 16 console.log(this.name) 17 } 18 19 //構造函數繼承 20 function Person1(name,age,sex){ 21 Person.call(this,name,age); 22 this.sex = sex; 23 } 24 25 //原型鏈繼承 : 但咱們在調用對象的屬性和方法的時候,若是這個對象沒有,就去原型鏈上查找 26 function extend(c){ 27 function p(){}; //這個構造函數是空的,這樣就不會有多餘的一些東西了 28 p.prototype = c.prototype; 29 return new P; 30 } 31 Person1.prototype = extend(Person); 32 Person1.prototype.constructor = Person1; 33 34 35 //淺拷貝:拷貝基本類型,複合類型會拷貝地址,複製第一層 36 for(let attr in Person.prototype){ 37 Person1.prototype[attr] = Person.prototype[attr]; 38 } 39 40 //深拷貝:每層都拷貝 41 function extend(data){ 42 if(typeof data === 'object'){ 43 let val = typeof data.length === 'number' ? [] : {}; 44 for(var s in data){ 45 val[s] = extend(data[s]); 46 } 47 return val; 48 }else{ 49 return data; 50 } 51 }