Я понимаю, что это было спрошено сотни раз, однако я не могу понять концепцию "почему" прототипы в JavaScript правильны, поскольку они предназначены для имитации классов (да, я знаю, что JavaScript - это прототипный язык - Я так много собрался).
Как и многие другие люди, стремящиеся сделать JavaScript повседневным языком, который я использую, я использую обычный стиль класса ООП, поскольку я играл в Java (и использовал классы в ActionScript, а также PHP). Однако, хотя я думаю, что понимаю, как работают прототипы, я не могу понять, почему они нужны.
Вот мой пример script того, как я сейчас понимаю прототипы в JavaScript:
var Apple = function() {
// An apple?
};
Apple.prototype.color = "red";
Apple.prototype.changeColor = function(new_color) {
this.color = new_color;
};
Apple.prototype.getColor = function() {
alert('color: '+this.color);
};
var apple1 = new Apple();
var apple2 = new Apple();
apple2.changeColor("green");
apple1.getColor();
apple2.getColor();
... Я предположил, что, возможно, прототип означал, что он разделяет один и тот же объект, а не просто создает новый объект каждый раз - однако это явно не так, поскольку и apple1, и apple2 имеют разные цвета, все еще ( после запуска указанного script).
Затем я написал его в том, что больше объектно-ориентированного script:
var Apple = function() {
this.color = "red";
this.changeColor = function(new_color) {
this.color = new_color;
};
this.getColor = function() {
alert('color: '+this.color);
};
};
var apple1 = new Apple();
var apple2 = new Apple();
apple2.changeColor("green");
apple1.getColor();
apple2.getColor();
С точно такими же результатами (как и ожидалось).... Почему последний код не рекомендуется? У меня нет проблем с использованием прототипов (если я правильно их использовал), но мне нужно понять концепцию "почему".
... Любая помощь?