2012-03-20 70 views
0

我想知道如何在Javascript类中创建一个私有属性。我尝试这样做:访问私有属性Javascript OOP

function Class1(selector) 
{ 
    //calling the constructor 
    Constructor(); 

    //private attribute 
    var $container = null; 

    function Constructor() 
    { 
     $container = $(selector); 

     //Shows that container is an object 
     alert($container); 
    } 

    function Foo() 
    { 
     //Shows that container is null 
     alert($container); 
    } 

    result { 
     Foo : Foo 
    }; 
} 

我认为,在“构造”它会创建一个新的变量$容器和对象分配给它。我想知道我是如何将值分配给对象的属性$容器而不是函数构造函数中的局部变量。

+1

'$容器= $(选择);'能做到这一点,但似乎你永远不会调用'Constructor' *编辑: *错过了第一行,是的,这些陈述只是错误的顺序。也就是说,我不是那种以这种方式模拟可视性的大爱好者。海事组织使得代码过于复杂和不灵活。而是恰当地记录你的代码。 – 2012-03-20 15:27:47

+1

刚刚发现它......这是因为我在创建变量之前调用了构造函数方法。所以它在函数中创建一个,然后创建一个对象。 – maniak 2012-03-20 15:29:38

+0

@Felix Kling我认为它使代码更清晰。只需设置脚本在其自己的私人处理和其他公共的功能,以便用户可以参考它。可能不是最好的解决方案,但它的工作原理,我认为这是因为所有的COMON功能重新组合后更容易编辑。 – maniak 2012-03-20 15:33:08

回答

1

这是因为你先叫Constructor()后您分配null$container

如果您切换周围,你会得到期望的结果:

http://jsfiddle.net/R8RG5/

+0

是的,谢谢我发现它......只是不能设置问题来解决我自己的问题,但自从您回答解决方案后,我发现我会将您的答案标记为已接受。 – maniak 2012-03-20 15:35:33

0
function Class1(selector) { 

    var container = null; //private attribute 
    constructor(); //calling the constructor 

    function constructor() { 
     container = $(selector); 
     console.log($container); //Shows that container is an object 
    } 

    function foo() { 
     console.log(container); //Shows that container is null 
    } 

    result { Foo : foo }; 
} 

如红-X已经告诉:你必须在容器变量初始化后执行构造函数。

在我的例子:是一个更好的做法是使用console.log调试..

+0

我不认为使用小写字母的名字真的更好。我总是用课堂上课,并被告知。如果你看看Java,即使是类String以大写字母开头。 – maniak 2012-03-20 16:03:20

+0

@maniak我写了“函数名称”不是类名和更正了类的名称:) – mrzmyr 2012-03-20 16:04:27

+0

大声笑OK!但仍然认为它取决于你的风格。我用C++编写了大量的电子游戏编程书籍,其中很多以大写字母编写函数。我不认为这是更好的做法,而只是两种不同的风格。删除了 – maniak 2012-03-20 16:40:18