ES5繼承

 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 }
相關文章
相關標籤/搜索