Javascript:无法从私有(private)方法访问公共(public) Prop

标签 javascript

快速提问。

我已经(适度)使用 jQuery 很长时间了,但我从来没有真正体验过“类”(松散地使用)。

这是我的测试“类”,位于http://jsfiddle.net/TxUs2/ .

function MyClass(prop) {
    this.prop = prop;

    var init = function()
    {
        alert(this.prop);
    }

    init();
}

var myClass = new MyClass();

我希望 init() 方法是私有(private)的。请有人简要解释一下为什么我无法通过私有(private)方法访问公共(public)属性?

我假设它与“this”有关,本质上是从方法内部指向方法本身,而不是包含函数(或“类”)。我该如何解决这个问题?

非常感谢。

编辑:非常感谢您的所有投入。所有答案都很棒。 :)

最佳答案

问题是当您调用 init 时它在没有上下文的情况下被调用,因此 this不引用 MyClass 的实例.您可以通过保存对 this 的引用来解决此问题在构造函数中,调用 initthis 的背景下或绑定(bind) initthis :

  • 保存对 this 的引用:

    function MyClass(prop) {
        this.prop = prop;
    
        var that = this;
        var init = function() {
            alert(that.prop);
        }
    
        init();
    }
    
  • 调用 initthis 的背景下:

    init.call(this);
    
  • 绑定(bind) initthis (这使得每个调用的行为都像 init.call(this) ):

    var init = function () {
        alert(this.prop);
    }.bind(this);
    
    init();
    

关于Javascript:无法从私有(private)方法访问公共(public) Prop ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22762374/

相关文章:

javascript - 调用 Javascript 函数并返回响应

javascript - 仅显示完全匹配的内容

javascript - 为什么没有找到元素,除了在 jsfiddle 中?

Javascript 提示方法在确实定义时未定义

javascript - 使用 Javascript 创建 Base64 转换器

javascript - 如何将送货地址详细信息传递给 token 、客户或收费对象?

javascript - document.ready 上保存的用户/密码为空

javascript - 在输入框中设置 "minimum"字符输入抛出 javascript

javascript - 隐藏行的表排序问题

javascript - 为什么我的 JavaScript 不工作?我的正则表达式似乎有问题,但我无法弄清楚