2013-03-16 67 views
2

http://jsfiddle.net/totszwai/WvbPn/2/为什么我的JS对象看不到它自己的函数?

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”。

+1

此外,您提供的示例将对话框放入全局名称空间。如果不是这样设计的,请将“var”放在前面。 – tjameson 2013-03-16 01:39:39

回答

4

快速修复:

的对话框定义中,使用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,特别是关于构造函数模式的部分和周围部分。

+1

啊......如何在调试()内调用函数?比如说,调用dialogbox.deubg(),然后调试test()。它有点迫使我使用this.test(),但有点烦人,语法不干净...我试过用不同的方式避免在课堂中使用“this”..呃。 – codenamezero 2013-03-16 07:08:48

+0

@codenamezero:**在类构造函数中使用'this'是正确的方法。**我不确定“语法不干净”的含义。你可以在你的问题中添加一个新的部分(标题为“编辑”或“更新”是合适的),如果你想详细说明:-)我知道这很混乱 - 不熟悉像继承,多态,封装等OOP机制?请记住,JavaScript中的所有内容都是一个**对象** - 包括**函数**,这就是为什么我们可以使用'this'来引用该函数的*实例*(当以这种方式使用时,我们称之为一类**)。 – 2013-03-16 15:17:50

+0

@codenamezero:这里是一个关于使用“this inside function”的StackOverflow问题的有用答案:http://stackoverflow.com/a/1963390/873263 – 2013-03-16 15:18:56

相关问题