不要像那样添加原型成员。这很奇怪/不好/错误。
您正在设置整个prototype
现有对象,而不是向其中添加成员。这将导致性能问题、JS 引擎优化问题和意外行为。
如果你不知何故需要覆盖原型,你应该使用Object.setPrototypeOf()
方法。即使它是本机方法,仍然不推荐。
如果您唯一的问题是“隐藏”一些私有常量,您有以下选择:
- 使用 IIFE(立即调用函数表达式):
/**
* 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;
})();
- 对私有变量/常量使用常规
_
前缀并使用 JSDoc@private
标记。
/**
* 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");
};