Effective JavaScript Item 39 绝不要重用父类型中的属性名

来源:互联网 发布:微信编辑器 知乎 编辑:程序博客网 时间:2024/06/07 01:46

本系列作为Effective JavaScript的读书笔记。

 

如果需要向Item 38中的Actor对象添加一个ID信息:


function Actor(scene, x, y) {this.scene = scene;this.x = x;this.y = y;this.id = ++Actor.nextID;scene.register(this);}Actor.nextID = 0;

同时,也需要向Actor的子类型Alien中添加ID信息:


function Alien(scene, x, y, direction, speed, strength) {Actor.call(this, scene, x, y);this.direction = direction;this.speed = speed;this.strength = strength;this.damage = 0;this.id = ++Alien.nextID; // conflicts with actor id!}Alien.nextID = 0;

Alien的构造函数中,也对id属性进行了赋值。因此,在Alien类型的实例中,id属性永远都是通过Alien.nextID进行赋值的,而不是Actor.nextID。父类型的id属性被子类型的id属性覆盖了。

 

解决方案也很简单,在不同的类型中使用不同的属性名:


function Actor(scene, x, y) {this.scene = scene;this.x = x;this.y = y;this.actorID = ++Actor.nextID; // distinct from alienIDscene.register(this);}Actor.nextID = 0;function Alien(scene, x, y, direction, speed, strength) {Actor.call(this, scene, x, y);this.direction = direction;this.speed = speed;this.strength = strength;this.damage = 0;this.alienID = ++Alien.nextID; // distinct from actorID}Alien.nextID = 0;

总结

  1. 注意所有父类型中使用的属性名称不要和子类型中的重复。
  2. 在子类型中不要重用父类型中已经使用的属性名。

0 0
原创粉丝点击