2012-03-20 3 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 
    }; 
} 

я предположил, что в «Конструкторе» создает новый переменный $ контейнер и назначить объект к нему. Я хочу знать, как мне суждено назначить значение атрибуту $ container объекта, а не локальной переменной в функции Constructor.

+1

'$ контейнера = $ (селектор);' будет делать это, но вы, кажется, никогда не называя 'Constructor' * редактировать: * пропустил первую строчку, да, заявления находятся в неправильном порядке. Тем не менее, я не большой поклонник эмуляции видимости таким образом. ИМО делает код слишком сложным и негибким. Скорее документируйте свой код правильно. –

+1

Только что нашел ... Это потому, что я вызываю метод конструктора, прежде чем создавать переменную. Таким образом, он создает один в функции и после этого создает объект. – maniak

+0

@Felix Kling Я думаю, что он делает код более понятным. Просто установите функцию, которую скрипт обрабатывает на своем собственном личном и общедоступном, чтобы пользователь мог ссылаться на нее. Возможно, это не лучшее решение, но оно работает, и я думаю, что его легче редактировать после того, как все функции comon перегруппированы. – maniak

ответ

1

это потому, что вы сначала вызвать Constructor() и после этого вы назначаете null к $container

Если вы переключитесь что вокруг вы получите желаемый результат:

http://jsfiddle.net/R8RG5/

+0

Да, спасибо, я нашел его ... Просто не мог задать вопрос для решения по моему собственному вопросу, но так как вы ответили на решение, которое я нашел, я помету ваш ответ как принятый. – maniak

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

Я не думаю, что лучше использовать нижний регистр для имени класса. Я всегда использую Upper Case для класса, и мне сказали. Если вы посмотрите на Java, то даже класс String начинается с верхнего регистра. – maniak

+0

@maniak я написал «имена функций», а не имена классов и исправил имя класса :) – mrzmyr

+0

lol ok! Но все же думайте, что это зависит от вашего стиля. Я красновато много книг программирования видеоигр в C++, и многие из них пишут функции с прописными буквами. Я не думаю, что это лучшая практика, но только два разных стиля. – maniak

Смежные вопросы