gpt4 book ai didi

javascript - 我是否违反了面向对象的封装原则?

转载 作者:行者123 更新时间:2023-11-28 19:10:18 25 4
gpt4 key购买 nike

我想知道这是否是初始化对象的正确方法,它需要 map 上的随机位置和速度。我不确定我分别调用 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();

感谢您的任何建议。

最佳答案

封装原则是关于限制对象的某些部分(例如,不应从对象外部访问的内部操作或字段)。通俗的理解也是使用访问器来访问字段。

Javascript 不提供任何允许限制对字段或方法的访问的机制。但是,可以通过使用Module pattern来实现它。 .

在您的示例中,所有字段和方法都是公开可用的。有些人可能会说您不使用访问器(x 和 y 的 getter/setter 对),但我个人的观点是,它不会以任何方式使您的代码受益。此外,通过赋值运算符和 setter 函数访问变量最终可能会被 JIT 编译为完全相同的代码(至少 Java 中是这样)。在静态类型语言中,使用访问器可能有很多好处,但其中大多数不适用于 javascript。

tl;博士

你的代码没问题。

关于javascript - 我是否违反了面向对象的封装原则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30833807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com