【问题标题】:Why can't my JS object see its own function?为什么我的 JS 对象看不到自己的功能?
【发布时间】:2013-03-16 01:35:07
【问题描述】:

http://jsfiddle.net/totszwai/WvbPn/2/

function DialogBox() {
    this.__DEBUGGING__ = false;

    DialogBox.debug = function (b) {
        this.__DEBUGGING__ = b;
    };

    DialogBox.test = function (b) {
        alert("hello worodl");
    };
};


$(document).ready(function () {
    dialogbox = new DialogBox();
    dialogbox.test();
});

我不知道我在那里做错了什么。我试过了

DialogBox.prototype.test
DialogBox.test
test

我正在努力做到这一点,以便在内部调用它自己的函数时,我不需要一直输入this...例如:this.test()

更新: 还有没有办法在调用私有函数时不到处键入“this”?通常我只写一次使用的简单全局函数,但现在我试图写一些不同的东西,我将在我的课堂上到处调用这些私有函数。所以我试图避免在任何地方使用“this”……更不用说它使代码的可读性很差。

就像在 Java(不是 JS)中一样,您不需要在任何地方都输入“this”。

【问题讨论】:

  • 另外,您给出的示例将对话框放入全局命名空间。如果这不是设计使然,请将“var”放在前面。

标签: javascript object


【解决方案1】:

快速修复:

在 DialogBox 定义中,使用this. 定义其方法:

http://jsfiddle.net/AaronBlenkush/WvbPn/4/

function DialogBox() {
    this.__DEBUGGING__ = false;

    this.debug = function (b) {
        this.__DEBUGGING__ = b;
    };

    this.test = function (b) {
        alert("hello worodl");
    };
};


$(document).ready(function () {
    dialogbox = new DialogBox();
    dialogbox.test();
});

要获得全面的答案:

StackOverflow 的答案太多了。

如需详细了解此主题,请参阅 Addy Osmani 的书 Learning JavaScript Design Patterns,尤其是关于构造函数模式的部分,以及相关部分。

【讨论】:

  • 啊...在 debug() 中调用函数怎么样?例如,调用 dialogbox.deubg(),然后在 debug 中调用 test()。这有点强迫我使用 this.test(),但有点烦人,语法也不干净……我尝试了不同的方式来避免在类中使用“this”……呃。
  • @codenamezero:在类构造函数中使用this 是正确的方法。我不确定您所说的“语法不干净”是什么意思。如果您想详细说明,您可以在您的问题中附加一个新部分(标题为“编辑”或“更新”是合适的):-) 我知道这很令人困惑——不熟悉 OOP 机制,如继承、多态性、封装等?请记住,JavaScript 中的一切都是对象——包括函数,这就是为什么我们可以使用this 来引用其中的instances函数(以这种方式使用时,我们称其为)。
  • @codenamezero:这是 StackOverflow 关于使用“this inside function”的有用答案:stackoverflow.com/a/1963390/873263
  • 我知道OOP,但以Java为例,你在一个类中有私有函数,当我们调用一个函数时,我们只需输入函数名而不输入“this”......只是我只是觉得奇怪的是,在 JS 类中,我们必须在调用私有函数时将“this”放在任何地方。
猜你喜欢
  • 2012-04-21
  • 1970-01-01
  • 2018-02-05
  • 1970-01-01
  • 2017-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-01
相关资源
最近更新 更多