繁体   English   中英

Javascript:无法通过私有方法访问公共道具

[英]Javascript: Unable to access public prop from private method

快速提问。

我已经使用jQuery很长时间了,但是我从来没有对“类”(松散使用)有太多的经验。

这是我的测试“类”,可从http://jsfiddle.net/TxUs2/获得

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

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

    init();
}

var myClass = new MyClass();

我希望init()方法是私有的。 请有人可以简要解释一下为什么我无法通过私有方法访问公共财产吗?

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

提前谢谢了。

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

问题是,当你调用init它被称为没有上下文,因此this并不是指的实例MyClass 您可以通过保存的参考解决这个this构造函数,调用init的背景下this或结合initthis

  • 保存this的引用:

     function MyClass(prop) { this.prop = prop; var that = this; var init = function() { alert(that.prop); } init(); } 
  • 调用init中的情况下this

     init.call(this); 
  • initthis绑定(这使每个调用的行为都类似于init.call(this) ):

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

在您当前的代码中, init()是一个“免费”函数。 如果你自然地调用它,它的身体内, this将被设置为全局对象(或undefined严格模式)。

您可以通过编写以下内容使其成为一种方法:

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

this.init();

或者,您可以使用call()apply()在调用时提供上下文:

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

init.call(this);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM