2015-04-22 2 views
0

Так что у меня есть некоторые проблемы с JavaScript. Я не профессионал и не понимаю, почему это не работает. Все, что я пытаюсь сделать, это присвоить моей частной переменной возвращаемое значение частной функции. Если я задаю var xxx = function name(), он выполнит функцию, когда я ссылаюсь на xxx. Вот мой код. Примечание - var username = getessionuser(); ниже.Javascript: Назначение частного метода частной переменной

//Namespace 
var SESSIONCONTROLS=SESSIONCONTROLS || {}; 
SESSIONCONTROLS.APP=SESSIONCONTROLS.APP || {}; 


SESSIONCONTROLS.APP.User = (function() { 
// defined within the local scope 

//Private Variable 
var username=getsessionuser(); 

//Privatemethod 
var getsessionuser=function(){var mname='My Name'; return mname;} 

//Private Property & Method Example 
var privateMethod1 = function() { alert("private method 1"); } 
var privateMethod2 = function() { alert("private method 2");} 

var privateProperty1 = 'foobar'; 
return {   
    //Public Method & Nested Namespace examples 
    //Public Methods 
    publicMethod1: privateMethod1, 
    //nested namespace with public properties 
    properties:{ 
     publicProperty1: privateProperty1, 
     sessionname:username 
    }, 
    //another nested namespace 
    utils:{ 
     publicMethod2: privateMethod2 
    } 
    } 
})(); 

Это то, как его называют в другой рутине.

var name=SESSIONCONTROLS.APP.User.properties.sessionname; 
alert(name);  

Почему это не работает?

+0

Вы должны держать свой браузер консоли разработчика открыт для проверки на наличие ошибок во время выполнения. – Pointy

ответ

4

У вас есть простая задача заказа:

var username=getsessionuser(); 

//Privatemethod 
var getsessionuser=function(){var mname='My Name'; return mname;} 

JavaScript не будет жаловаться на неопределенных ссылки на переменных, поскольку он рассматривает все var заявления в функции, как если бы они появились в самом начале код. Тем не менее, инициализации в var заявления выполняются в последовательности, которую они отображают.

Таким образом, в момент, когда ваш код пытается инициализировать username, переменная getsessionuser не определена.

Если вы просто переупорядочиваете эти два оператора так, чтобы функция была определена первой, то эта часть по крайней мере будет работать.

В качестве альтернативы, вы можете определить функцию с функцией оператора объявления:

function getsessionuser() { 
    var mname = "My Name"; 
    return mname; 
} 

Тогда ваш код будет работать, даже если оставить инициализацию username перед функцией, потому что объявления функций также «взвалил» вверх неявно к началу функции.

+0

Несмотря на то, что злоупотребление подъемами приведет к тому, что большинство разработчиков начнет кровоточить. –

+0

@JaimeTorres согласился конечно :) – Pointy

1

Вы вызываете getessionuser() до его определения. Перемещение

var getsessionuser=function(){var mname='My Name'; return mname;} 

выше

var username=getsessionuser(); 
Смежные вопросы