您的位置:首页 > 新闻 > 会展 > 佛山建筑设计院有限公司官网_最近一周的重大新闻_创建自己的网址_怎么联系百度人工客服

佛山建筑设计院有限公司官网_最近一周的重大新闻_创建自己的网址_怎么联系百度人工客服

2025/1/8 19:18:02 来源:https://blog.csdn.net/m0_55049655/article/details/143660692  浏览:    关键词:佛山建筑设计院有限公司官网_最近一周的重大新闻_创建自己的网址_怎么联系百度人工客服
佛山建筑设计院有限公司官网_最近一周的重大新闻_创建自己的网址_怎么联系百度人工客服
function Father() {this.a = 1;this.b = [1, 2, this.a];this.c = { field: 5 };this.print = function () {console.log(this.a, this.b, this.c.field);};
}function Son() {this.a = 2;this.update = function () {this.b.push(this.a);this.a = this.b.length;this.c.field = this.a++;};
}Son.prototype = new Father();
var father = new Father();
var son1 = new Son();
var son2 = new Son();
son1.a = 11;
son2.a = 12;
father.print();
son1.print();
son2.print();
son1.update();
son2.update();
father.print();
son1.print();
son2.print();
1 [ 1, 2, 1 ] 5
11 [ 1, 2, 1 ] 5
12 [ 1, 2, 1 ] 5
1 [ 1, 2, 1 ] 5
5 [ 1, 2, 1, 11, 12 ] 5
6 [ 1, 2, 1, 11, 12 ] 5

代码执行过程及结果分析

  1. 定义 FatherSon 构造函数

    • Father 构造函数初始化属性 a(值为1),b(值为 [1, 2, this.a],即 [1, 2, 1]),c(对象 { field: 5 }),以及 print 方法。
    • Son 构造函数初始化属性 a(值为2)和 update 方法。Son.prototype = new Father(); 使得 Son 的实例对象能够继承 Father 中定义的 abcprint
  2. 实例化对象

    • var father = new Father(); 创建了一个 Father 的实例 father,其属性值为 a = 1b = [1, 2, 1]c = { field: 5 }
    • var son1 = new Son();var son2 = new Son(); 创建了两个 Son 的实例 son1son2。由于继承了 Father,它们各自拥有独立的 a 值(由 Son 构造函数初始化为2)和独立的 bc 的引用(通过继承 Father 的实例化对象)。因此,son1son2 的初始属性为 a = 2b = [1, 2, 1]c = { field: 5 }
  3. 修改属性

    • son1.a = 11;son1a 属性设置为11。
    • son2.a = 12;son2a 属性设置为12。
  4. 调用 print 方法

    • father.print(); 输出 father 的属性:a = 1b = [1, 2, 1]c.field = 5。结果为:1 [1, 2, 1] 5
    • son1.print(); 输出 son1 的属性:a = 11b = [1, 2, 1]c.field = 5。结果为:11 [1, 2, 1] 5
    • son2.print(); 输出 son2 的属性:a = 12b = [1, 2, 1]c.field = 5。结果为:12 [1, 2, 1] 5
  5. 调用 update 方法

    • son1.update(); 执行以下操作:

      • this.b.push(this.a);son1.a(即11)添加到 b 中,因此 son1.b 变为 [1, 2, 1, 11]
      • this.a = this.b.length;son1.a 更新为 b 的长度(4)。
      • this.c.field = this.a++;son1.c.field 设置为 a(即4),然后自增 a 为5。
      • 更新后,son1.a = 5son1.b = [1, 2, 1, 11]son1.c = { field: 4 }
    • son2.update(); 执行以下操作:

      • this.b.push(this.a);son2.a(即12)添加到 b 中,因此 son2.b 变为 [1, 2, 1, 11, 12]
      • this.a = this.b.length;son2.a 更新为 b 的长度(5)。
      • this.c.field = this.a++;son2.c.field 设置为 a(即5),然后自增 a 为6。
      • 更新后,son2.a = 6son2.b = [1, 2, 1, 11, 12]son2.c = { field: 5 }
  6. 再次调用 print 方法

    • father.print(); 仍然输出原始的 father 属性:a = 1b = [1, 2, 1]c.field = 5。结果为:1 [1, 2, 1] 5
    • son1.print(); 输出更新后的 son1 属性:a = 5b = [1, 2, 1, 11, 12]c.field = 5。结果为:5 [1, 2, 1, 11, 12] 5
    • son2.print(); 输出更新后的 son2 属性:a = 6b = [1, 2, 1, 11, 12]c.field = 5。结果为:6 [1, 2, 1, 11, 12] 5

在这个示例中,son1son2 实例共享了 Father 原型中的 bc 引用,因此 update 方法对 b 数组的修改会影响到所有 Son 实例

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com