код:
var p=new Person('stackoverflow');
создает новый экземпляр класса Person. Вы должны помнить, что классы в javascript являются функциями, поэтому при вызове:
Person.call(p,'stackoverflow');
Вы просто вызываете функцию Person и привязываете ее к объекту p (это означает, что в контексте функции this
будет ссылаться на объект p). Эти фрагменты кода делают то же самое, за исключением того факта, что первый является экземпляром класса, поэтому, если вы обновите объект-прототип человека, его свойства будут обновлены.
В любом случае ситуация меняется при заполнении объекта-прототипа функции Person:
Person.prototype={test:"test"}
Если вы добавите это после объявления функции Person, вы увидите, что эти части кода имеют другое поведение. Объект, инициализированный с помощью «new», будет содержать свойство test, но у другого его нет. Это происходит потому, что объект-прототип применяется только к экземплярам класса при использовании «new».