Во-первых, код A и B будут иметь разные результаты. Код A имеет конструктор для объекта и добавляет свойство к его прототипу. Это означает, что все экземпляры employee
будут иметь поле с именем salary
, которое является нулевым. Как и при обычном поведении свойств прототипа, если какой-либо из этих экземпляров записывает свойство, оно создает локальную копию для объекта.
Итак, используя код А:
var e = new employee('Bob', 'janitor', 1978);
alert(e.salary); // null
var f = new employee('Alice', 'teacher', 1976);
f.salary = 20000;
alert(f.salary); // 20000
alert(e.salary); // null
В случае кода B ни один из экземпляров работника не будет иметь зарплату в качестве свойства, но конструктор, например, будет. employee.salary
будет существовать и будет больше походить на статическую переменную класса в классическом наследовании. Вы можете сделать это, если хотите, чтобы значение было доступно для всех экземпляров, например employee.RETIREMENT_AGE = 65
, но вы обычно делаете это после конструктора, а не в нем (вы назначаете одно и то же несколько раз).