Don't add prototype members like that. That's weird / bad / wrong.
You're setting the whole prototype
of an existing object, rather than adding members to it. This will lead to performance problems, JS engine optimising issues and unexpected behaviour.
If you somehow need to overwrite the prototype, you should use Object.setPrototypeOf()
method. Which is still not recommended even though it's a native method.
If your only problem is to "hide" some private constant, you have these options:
- Use an IIFE (Immediately Invoked Function Expression):
/**
* A human being.
* @class
*/
var Person = (function () {
// private variables
var amountOfLimbs = 4;
/**
* Initializes a new instance of Person.
* @constructs Person
* @param {string} name
*/
function Person(name) {
/**
* Name of the person.
* @name Person#name
* @type {String}
*/
this.name = name
}
/**
* Introduce yourself
* @name Person#greet
* @function
*/
Person.prototype.greet = function () {
alert("Hello, my name is " + this.name + " and I have " + amountOfLimbs + " limbs");
};
return Person;
})();
- Use the conventional
_
prefix for private vars/constants and use JSDoc @private
tag.
/**
* Person class.
* @class
*/
function Person(name) {
/**
* Name of the person.
* @name Person#name
* @type {String}
*/
this.name = name
/**
* Amount of limbs.
* @private
*/
this._amountOfLimbs = 4;
}
/**
* Introduce yourself.
* @name Person#greet
* @function
*/
Person.prototype.greet = function () {
alert("Hello, my name is " + this.name + " and I have " + this._amountOfLimbs + " limbs");
};