1 <!doctype html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <title>原型继承</title>
6 </head>
7 <body>
8
9 </body>
10 </html>
11 <script src="jquery-1.11.3.js"></script>
12 <script>
13 function Person(name,age){
14 this._name = name;
15 this.age = age;
16
17 }
18 Person.prototype.eat = function(){
19 console.log("吃--------------")
20 }
21 Person.prototype.sleep = function(){
22 console.log("睡--------------")
23 }
24 function Man(name,age,sex){
25 /*call(this,值1,值2,值3)和apply(this,[])都可以用来属性继承、方法借用等操作,参数1都是this的指向*/
26 // Person.call(this,name,age);
27 Person.apply(this,[name,age]);
28 this.sex = sex;
29 }
30 /*原型继承*/
31 // Man.prototype = Person.prototype;//原型继承,添加新方法,父级也会有,称为污染父级
32
33 /*原型拷贝*/
34 /* for(var key in Person.prototype){
35 Man.prototype[key] = Person.prototype[key];
36 }*/
37
38 /*原型链继承*/
39
40 // Man.prototype = new Person();//原型对象指向发生改变,少了constructor,多了不必要的属性
41
42 /*混合式继承*/
43 Man.prototype = {
44 constructor:Man,
45 __proto__:Person.prototype
46 }
47
48
49 /*寄生继承*/
50 /*function fn(){}
51 fn.prototype = Person.prototype;
52 Man.prototype = new fn();
53 Man.prototype.constructor = Man;*/
54
55 Man.prototype.run = function(){
56
57 }
58 console.log(new Person());
59 console.log(new Man());
60 console.log(Person.prototype);
61 console.log(Man.prototype);
62
63 /*ES6中的extends super继承*/
64
65 class A{
66 constructor(name,age,sex){
67 this._name = name;
68 this.age = age;
69 this.sex = sex;
70 }
71 sing(){
72 console.log("chang");
73 }
74 work(){
75 console.log("工作");
76 }
77 }
78 class B extends A{
79 constructor(m,name,age,sex){
80 super(name,age,sex);
81 this.m = m;
82 }
83 play(){
84 console.log("玩")
85 }
86 }
87 console.log([A]);
88 console.log([B]);
89 </script>