js继承有5种实现方式:

js继承有5种实现方式:
  1 <! DOCTYPE HTML PUBLIC  " -//W3C//DTD HTML 4.01 Transitional//EN "   " http://www.w3.org/TR/html4/loose.dtd " >
  2 < html >
  3   < head >
  4    < title >  New Document  </ title >
  5    < meta name = " Generator "  content = " EditPlus " >
  6    < meta name = " Author "  content = "" >
  7    < meta name = " Keywords "  content = "" >
  8    < meta name = " Description "  content = "" >
  9    < script type  =   " text/javaScript " >
 10   js继承有5种实现方式: 
 11 1 、继承第一种方式:对象冒充 
 12    function  Parent(username)
 13    this.username = username; 
 14    this.hello = function()
 15      alert(this.username); 
 16    }
 
 17  }
 
 18    function  Child(username,password)
 19    //通过以下3行实现将Parent的属性和方法追加到Child中,从而实现继承 
 20    //第一步:this.method是作为一个临时的属性,并且指向Parent所指向的对象, 
 21    //第二步:执行this.method方法,即执行Parent所指向的对象函数 
 22    //第三步:销毁this.method属性,即此时Child就已经拥有了Parent的所有属性和方法 
 23    this.method = Parent; 
 24    this.method(username);//最关键的一行 
 25    delete this.method; 
 26
 27    this.password = password; 
 28    this.world = function()
 29      alert(this.password); 
 30    }
 
 31  }
 
 32    var  parent  =   new  Parent( " zhangsan " ); 
 33    var  child  =   new  Child( " lisi " , " 123456 " ); 
 34   parent.hello(); 
 35   child.hello(); 
 36   child.world(); 
 37
 38 2 、继承第二种方式:call()方法方式 
 39   call方法是Function类中的方法 
 40   call方法的第一个参数的值赋值给类(即方法)中出现的this 
 41   call方法的第二个参数开始依次赋值给类(即方法)所接受的参数 
 42
 43    function  test(str)
 44    alert(this.name + " " + str); 
 45  }
 
 46    var  object  =   new  Object(); 
 47   object.name  =   " zhangsan "
 48   test.call(object, " langsin " ); // 此时,第一个参数值object传递给了test类(即方法)中出现的this,而第二个参数"langsin"则赋值给了test类(即方法)的str
 49  
 50    function  Parent(username)
 51    this.username = username; 
 52    this.hello = function()
 53      alert(this.username); 
 54    }
 
 55  }
 
 56    function  Child(username,password)
 57    Parent.call(this,username); 
 58    
 59    this.password = password; 
 60    this.world = function()
 61      alert(this.password); 
 62    }
 
 63  }
 
 64    var  parent  =   new  Parent( " zhangsan " ); 
 65    var  child  =   new  Child( " lisi " , " 123456 " ); 
 66   parent.hello(); 
 67   child.hello(); 
 68   child.world(); 
 69
 70 3 、继承的第三种方式:apply()方法方式 
 71   apply方法接受2个参数, 
 72     A、第一个参数与call方法的第一个参数一样,即赋值给类(即方法)中出现的this 
 73     B、第二个参数为数组类型,这个数组中的每个元素依次赋值给类(即方法)所接受的参数 
 74
 75    function  Parent(username)
 76    this.username = username; 
 77    this.hello = function()
 78      alert(this.username); 
 79    }
 
 80  }
 
 81    function  Child(username,password)
 82    Parent.apply(this,new Array(username)); 
 83    
 84    this.password = password; 
 85    this.world = function()
 86      alert(this.password); 
 87    }
 
 88  }
 
 89    var  parent  =   new  Parent( " zhangsan " ); 
 90    var  child  =   new  Child( " lisi " , " 123456 " ); 
 91   parent.hello(); 
 92   child.hello(); 
 93   child.world(); 
 94
 95 4 、继承的第四种方式:原型链方式,即子类通过prototype将所有在父类中通过prototype追加的属性和方法都追加到Child,从而实现了继承 
 96    function  Person()
 97  }
 
 98   Person.prototype.hello  =   " hello "
 99   Person.prototype.sayHello  =   function ()
100    alert(this.hello); 
101  }
 
102   
103    function  Child()
104  }
 
105   Child.prototype  =   new  Person(); // 这行的作用是:将Parent中将所有通过prototype追加的属性和方法都追加到Child,从而实现了继承
106    Child.prototype.world  =   " world "
107   Child.prototype.sayWorld  =   function ()
108    alert(this.world); 
109  }
 
110   
111    var  c  =   new  Child(); 
112   c.sayHello(); 
113   c.sayWorld(); 
114
115 5 、继承的第五种方式:混合方式 
116   混合了call方式、原型链方式 
117
118    function  Parent(hello)
119    this.hello = hello; 
120  }
 
121   Parent.prototype.sayHello  =   function ()
122    alert(this.hello); 
123  }
 
124
125    function  Child(hello,world)
126    Parent.call(this,hello);//将父类的属性继承过来 
127    this.world = world;//新增一些属性 
128  }
 
129
130   Child.prototype  =   new  Parent(); // 将父类的方法继承过来 
131
132   Child.prototype.sayWorld  =   function () {//新增一些方法 
133    alert(this.world); 
134  }
 
135
136    var  c  =   new  Child( " zhangsan " , " lisi " ); 
137   c.sayHello(); 
138   c.sayWorld(); 
139   </ script >
140   </ head >
141   < body >
142   
143   </ body >
144 </ html >
145

你可能感兴趣的:(js继承有5种实现方式:)