首页 > 代码库 > Effective JavaScript Item 39 绝不要重用父类型中的属性名
Effective JavaScript Item 39 绝不要重用父类型中的属性名
本系列作为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 alienID scene.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;
总结
- 注意所有父类型中使用的属性名称不要和子类型中的重复。
- 在子类型中不要重用父类型中已经使用的属性名。
Effective JavaScript Item 39 绝不要重用父类型中的属性名
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。