Назначение значения по умолчанию для JavaScript с использованием прототипов
Я хочу иметь возможность назначать значения по умолчанию для переменных, когда я использую прототипирование для создания объекта.
Когда я пытаюсь присвоить значения по умолчанию переменным, они всегда "неопределены".
Я пытался найти ответ, но все возможные решения, которые я пробовал, не работают.
Мои вопросы:
- почему переменная, которую я инициировал со значением, имеет значение "неопределенное"
как мне решить мою проблему?
(function() { EmployeeNS = {}; EmployeeNS.Employee = function() { var _firstName; var _lastName; var _employeeID = 'Unassigned'; } EmployeeNS.Employee.prototype.setFirstName = function(fName) { this._firstName = fName; }; EmployeeNS.Employee.prototype.getFirstName = function() { return this._firstName; }; EmployeeNS.Employee.prototype.setLastName = function(lName) { this._lastName = lName; }; EmployeeNS.Employee.prototype.getLastName = function() { return this._lastName; }; EmployeeNS.Employee.prototype.setEmployeeID = function(employeeID) { this._employeeID = employeeID; }; EmployeeNS.Employee.prototype.getEmployeeID = function() { return this._employeeID; }; EmployeeNS.Worker = function() { var _department; } EmployeeNS.Worker.prototype = new EmployeeNS.Employee(); EmployeeNS.Worker.prototype.constructor = Worker; EmployeeNS.Worker.prototype.setDepartment = function(department) { this._department = department; }; EmployeeNS.Worker.prototype.getDepartment = function() { return this._department; }; })(); function createWorker() { var x = new EmployeeNS.Worker(); x.setFirstName("John"); x.setLastName("Doe"); x.setDepartment("Transport"); var message = x.getFirstName() + " " + x.getLastName() + " (Department: " + x.getDepartment() + " / EmployeeID: " + x.getEmployeeID() + ")"; alert(message); }
Спасибо
2 ответа
Если вы хотите свойства экземпляра, сделайте это так:
(function() {
EmployeeNS = {};
EmployeeNS.Employee = function () {
this._firstName = null;
this._lastName = null;
this._employeeID = 'Unassigned';
};
EmployeeNS.Employee.prototype.setFirstName = function(fName) {
this._firstName = fName;
};
})();
Вы можете просто заставить это работать, изменяя это,
EmployeeNS.Employee = function() {
this._firstName;
this._lastName;
this._employeeID = 'Unassigned';
}
Попробуйте, таким образом, вы можете сделать эти переменные действительно частными, оборачивая Employee
,
(function() {
EmployeeNS = {};
(function() {
var _firstName;
var _lastName;
var _employeeID = 'Unassigned';
EmployeeNS.Employee = function() {
}
EmployeeNS.Employee.prototype.setFirstName = function(fName) { _firstName = fName; };
EmployeeNS.Employee.prototype.getFirstName = function() { return _firstName; };
EmployeeNS.Employee.prototype.setLastName = function(lName) { _lastName = lName; };
EmployeeNS.Employee.prototype.getLastName = function() { return _lastName; };
EmployeeNS.Employee.prototype.setEmployeeID = function(employeeID) { _employeeID = employeeID; };
EmployeeNS.Employee.prototype.getEmployeeID = function() { return _employeeID; };
})();
(function() {
var _department;
EmployeeNS.Worker = function() {
}
EmployeeNS.Worker.prototype = new EmployeeNS.Employee();
EmployeeNS.Worker.prototype.constructor = Worker;
EmployeeNS.Worker.prototype.setDepartment = function(department) { _department = department; };
EmployeeNS.Worker.prototype.getDepartment = function() { return _department; };
})();
})();
Вот jsfiddle