我想知道这是否是初始化对象的正确方法,这需要在地图上随机定位和加速。我不确定我是否通过分别调用Warrior.chooseX()和Warrior.choosey()来使用对象初始化器this.x和thi.y来违反封装原则。
var Warrior = function() {
this.x = Warrior.chooseX();
this.y = Warrior.chooseY();
this.speed = Warrior.chooseSpeed();
};
Warrior.chooseX = function() {
return Math.random() * 600 - 200;
};
Warrior.chooseY = function() {
var randomNumber = Math.random();
if (0 <= randomNumber && randomNumber < 0.5) {
return 100;
} else {
return 200;
}
};
Warrior.chooseSpeed = function() {
return Math.floor(Math.random() * 200) + 100;
};
var warrior = new Warrior();
感谢您的任何建议。
答案 0 :(得分:3)
封装原则是关于限制对象的某些部分(例如,内部操作或不应从对象外部获得的字段)。共同的理解也是使用访问器来访问字段。
Javascript不提供任何允许限制对字段或方法的访问的机制。但是,可以使用Module pattern来实现它。
在您的示例中,所有字段和方法都是公开的。有些人可能会争辩说你不使用访问器(x和y的getter / setter对),但我个人的观点是它不会以任何方式使你的代码受益。此外,通过赋值运算符和setter函数访问变量最终可能被JIT编译为完全相同的代码(至少,这是Java中发生的情况)。在静态类型语言中,使用访问器可能很好的原因有很多,但大多数都不适用于javascript。
TL;博士
你的代码很好。