原型中的javascript私有成员

时间:2014-12-09 18:48:08

标签: javascript private-members

我想开始我对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没有上下文("这个"指向名称不存在的窗口)。

我对这个问题的解决方案是:

function greet() {
    console.log("hello " + getName.call(this));
}
然而,对于更大的班级,它会变得有点混乱。

这是一个干净的解决方案吗?如有任何反馈,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

你编写getName的方式不是方法,而是静态函数。如果你不想让它成为一个公共方法(我没有看到为什么getter是私有的好理由),并且不想使用.call(),那么你需要传递实例明确地:

Person.prototype = (function() {

    function getName(self) {
        return self.name;
    }

    function greet() {
        console.log("hello " + getName(this));
    }

    return {
        constructor: Person,
        greet: greet
    }
})();

我认为所有三种解决方案同样干净。