【发布时间】:2014-12-09 18:48:08
【问题描述】:
我想开始说我对 JS 感到不舒服。
我在原型中实现私有方法时遇到了问题。假设我们有一个 Person 类。我想公开 greet 方法但保持 getName 私有。
function Person(name) {
this.name = name;
}
Person.prototype = (function() {
function getName() {
return this.name;
}
function greet() {
console.log("hello " + getName());
}
return {
greet: greet
}
})();
p = new Person('Szymon');
p.greet();
上面的代码无法工作,因为 getName 没有上下文(“this”指向不存在名称的窗口)。
我对这个问题的解决方案是:
function greet() {
console.log("hello " + getName.call(this));
}
但是,大课会有点乱。
这是一个干净的解决方案吗?如有任何反馈,我将不胜感激。
【问题讨论】:
-
我认为最好的解决方案是不要担心私有和公共,只需在内部方法前加上下划线即可。
-
@Teemu:这种约定被广泛接受,并不缺乏能力。当然,您需要一些能力来决定何时应用此约定是可行的。
-
@kit:请注意术语“原型中的私有成员”可能会造成混淆。
getName不是成员(属性),它只是一个局部变量。 -
@Bergi 我同意,我将其命名为私有方法。
-
@kit,或使用
Object.defineProperty使其不可写。
标签: javascript private-members