标签:++ div 子类 rip color 对象 nic size effect
本系列作为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属性覆盖了。
解决方式也非常easy,在不同的类型中使用不同的属性名:
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 绝不要重用父类型中的属性名
标签:++ div 子类 rip color 对象 nic size effect
原文地址:http://www.cnblogs.com/wzzkaifa/p/7160407.html