JavaScript面向对象编程(10)快速构建继承关系之对象拷贝

释放双眼,带上耳机,听听看~!

前面的例子我们是通过构造器创建对象,并且希望该对象继承来自另外一个构造器的对象

我们也可以直接面向一个对象来达成继承的目的,使用下属步骤:

1、拷贝一个对象

2、给新对象添加属性


1
2
3
4
5
6
7
8
9
10
11
12
13
1/**
2 * 通过拷贝继承对象的属性和行为
3 * @param {Object} p 父对象
4 */
5function extendCopy(p) {
6   var c = {};
7   for (var i in p) {
8       c[i] = p[i];
9   }
10  c.uber = p;
11  return c;
12}
13

1
2
1  使用起来也比较简单:  
2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1var shape = {
2   name: 'shape',
3   toString: function() {return this.name;}
4}
5var twoDee = extendCopy(shape);
6twoDee.name = '2D shape';
7twoDee.toString = function(){return this.uber.toString() + ', ' + this.name;};
8
9var triangle = extendCopy(twoDee);
10triangle.name = 'Triangle';
11triangle.getArea = function(){return this.side * this.height / 2;}
12//使用继承而来的toString方法
13alert(triangle.toString());
14

至于要深度拷贝,可使用下面的函数


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1/**
2 * 深度拷贝
3 * @param {Object} p  父对象
4 * @param {Object} c  子对象
5 */
6function deepCopy(p, c) {
7   var c = c || {};
8   for (var i in p) {
9       if (typeof p[i] === 'object') {
10          c[i] = (p[i].constructor === Array) ? [] : {};
11          deepCopy(p[i], c[i]);
12      } else {
13          c[i] = p[i];
14      }
15  }
16  return c;
17}
18

给TA打赏
共{{data.count}}人
人已打赏
安全技术

对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB)

2021-8-18 16:36:11

安全技术

C++ 高性能服务器网络框架设计细节

2022-1-11 12:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索