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

Posted wzzkaifa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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属性覆盖了。

 

解决方式也非常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;

总结

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









以上是关于Effective JavaScript Item 39 绝不要重用父类型中的属性名的主要内容,如果未能解决你的问题,请参考以下文章

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

Effective JavaScript Item 63 注意异步调用中可能会被忽略的异常

Effective JavaScript Item 30 理解prototype, getPrototypeOf和__proto__的不同

Effective JavaScript Item 31 优先使用Object.getPrototypeOf,而不是__proto__

Item 39:明智地使用private继承 Effective C++笔记

Item 40:明智地使用多继承 Effective C++笔记