Чтобы быть справедливым, JavaScript имеет классы.Ну, может кто-то поспорит с этим, но я считаю, что это просто семантическое разделение волос.Если для создания объектов выбран класс, то функция JavaScript может служить в этом качестве.Здесь нет большой разницы в функциях, только форма:
class someObj
{
private int x;
public int returnX()
{
return x;
}
}
someObj temp = new someObj();
-
function someObj {
var x;
this.returnX = function() {
return x;
};
}
var temp = new someObj();
Под капотом они разные, но вы можете использовать любую формучтобы служить той же цели.
Прототип действительно отличается по наследству.В прототипическом наследовании, когда вы создаете новый объект, вы действительно копируете экземпляр объекта-прототипа, а затем добавляете в него новые поля или элементы.Классическое наследование, с другой стороны, имеет дело не с экземпляром, а с «черным шрифтом».Например, в JavaScript вы сказали бы:
temp.prototype = new someOtherObj(); //Creating a new instance to serve as the prototype.
В классическом языке вы можете сказать:
class someObj : someOtherObj //Copying the "blue print" over.
Смысл в том, что данные будут совместно использоваться производными объектами в прототипеязык.Однажды я написал функцию, и у меня была другая функция, созданная на основе прототипирования в JavaScript.Этот базовый объект содержал ссылку на объект DOM, и когда я изменял его в одном дочернем объекте, он менял его для всех экземпляров этого дочернего объекта.Это потому, что, опять же, на языке прототипов вы производите от экземпляра, а не от «черновика».