-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjc.js
145 lines (128 loc) · 3.19 KB
/
jc.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
//1.原型链继承
// function Parent() {
// this.name = 'Parent'
// this.arr = [1, 2, 3]
// }
// Parent.prototype.getName = function () {
// console.log(this.name)
// }
// function Child() {
// this.age = 20
// }
// Child.prototype = new Parent()
// //实例使用的是同一个原型对象,内存空间是共享的
// let p = new Child()
// let c = new Child()
// c.name = 'xxx'
// p.name = 'ppp'
// p.arr.push(4)
// console.log(p.arr, c.arr, p.name, c.name) //引用类型数据共享
//2.构造函数继承
// function Parent() {
// this.name = 'Parent'
// this.arr = [1, 2, 3]
// }
// Parent.prototype.getName = function () {
// console.log(this.name)
// }
// function Child() {
// Parent.call(this)
// this.age = 20
// }
// let c1 = new Child()
// let c2 = new Child()
// c1.name = 'xxx'
// c1.arr.push(4)
// console.log(c1, c2)
// c1.getName()//不能继承原型属性或者方法
//3.组合继承 1+2
// function Parent() {
// this.name = 'Parent'
// this.arr = [1, 2, 3]
// }
// Parent.prototype.getName = function () {
// console.log(this.name)
// }
// function Child() {
// Parent.call(this)
// this.age = 20
// }
// Child.prototype = new Parent()
// Child.prototype.constructor = Child//构造器 指向自己的构造函数
// let c1 = new Child()
// let c2 = new Child()
// c1.name = 'xxx'
// c1.arr.push(4)
// console.log(c1, c2)
// c1.getName()
//解决了 1 2 的弊端,但是多调用一次Parent构造
//4.原型继承 和1.原型链继承差不多
// function Parent() {
// this.name = 'Parent'
// this.arr = [1, 2, 3]
// }
// Parent.prototype.getName = function () {
// console.log(this.name)
// }
// // let parent = {
// // name: "parent",
// // arr: [1, 2, 3],
// // getName: function () {
// // return this.name
// // }
// // }
// // //Object.create
// // function inheritObject(o) {
// // function fn() { }
// // fn.prototype = o
// // return new fn()
// // }
// let parent = new Parent()
// let c1 = Object.create(parent)
// let c2 = Object.create(parent)
// c1.name = 'xxx'
// c1.arr.push(4)
// c2.arr.push(5)
// console.log(c1.name, c2.name, c1.arr, c2.arr)
// c1.getName()
//和1.原型链继承 有相同的问题 引用类型数据共享
//5.寄生继承 在原型继承添加一些自己的方法 缺点和原型继承一样
// function Parent() {
// this.name = 'Parent'
// this.arr = [1, 2, 3]
// }
// Parent.prototype.getName = function () {
// console.log(this.name)
// }
// let parent = new Parent()
// let c1 = Object.create(parent)
// c1.getArr = function () {
// console.log(this.arr)
// }
// let c2 = Object.create(parent)
// c1.name = 'xxx'
// c1.arr.push(4)
// c2.arr.push(5)
// console.log(c1.name, c2.name, c1.arr, c2.arr)
// c1.getName()
// c1.getArr()
//6.寄生组合式继承
function Parent() {
this.name = 'Parent'
this.arr = [1, 2, 3]
}
Parent.prototype.getName = function () {
console.log(this.name)
}
function Child() {
Parent.call(this)
this.age = 20
}
Child.prototype = Object.create(Parent.prototype)//减少一次new Parent 构建
Child.prototype.constructor = Child//构造器 指向自己的构造函数
let c1 = new Child()
let c2 = new Child()
c1.name = 'xxx'
c1.arr.push(4)
console.log(c1, c2)
c1.getName()