2015-02-08 4 views
-1

можно задать значение для локальной переменной при ее вызове? это мой кодJavascript: как установить значение для локальной переменной

var myvar={ 
F:function(){ 
    var x; 
    return x;} 
} 

моя проблема, когда я называю переменную х и установленное значение, как myvar.F().x="hello";. затем напомните это console.log(myvar.F().x) x не содержит это значение, но возвращает значение undefined? как я могу это исправить, но, пожалуйста, не предлагайте мне установить значение внутри функции FИИспользование параметров из функции F! другой способ, потому что я хочу сделать динамическую переменную не статическим значением. Спасибо за помощь.

+0

Простой ответ: вы не можете установить 'x' вне функции любым способом. –

+0

'myvar.F()' - это функция, а не объект, который возвращает одноразовое значение (из null, если я правильно помню JS). – Jhecht

+0

Вы можете просто передать значение x в качестве аргумента, см. Http://jsfiddle.net/vfapp42s/ – Sven

ответ

-1

(Вам нужно будет открыть консоль в своем браузере) помогает ли это подражать вашему поведению? Я не на 100% из-за того, почему вы хотели бы сделать что-то подобное для начала.

var myvar = { 
 
    f: function() { 
 
    this.x = this.x ||''; 
    return this; 
    } 
 
} 
 

 
console.log(myvar.f()); 
 
myvar.f() .x = "Not something"; 
 
console.log(myvar.f.x); 
 
console.log(myvar.f().x);

+0

нет Я хочу установить значение myvar.f () .x not to myvar.fx это переменная, которую вы не определяете, не является частью моего кода. – Ega

+0

Как уже было сказано, то, что вы хотите, точно не может быть сделано. Подходит ли мое редактирование? Почему именно у вас есть * этот формат? – Jhecht

0
var myvar = { 
    F: function(x) { 
    if (x) { 
     this.x = x; // if you are setting the value of x 
    } 
    else { 
     return this.x; // if you want the value of x 
    } 
    } 
} 

myvar.F("foo"); // Setter 
myvar.F(); // "foo" (Getter) 
1

Несмотря на ответы здесь, некоторые комментарии очень ясно. То, что вы хотите, невозможно.

Вы можете установить переменную в функцию возврата, но я нигде не буду сохранен. Ссылка немедленно теряется.

var myvar = { 
 
     f: function() { 
 
     var x = 'something'; 
 
     return x; 
 
     } 
 
    } 
 
    document.write(myvar.f());

Это будет возвращать x из метода f внутри объекта myvar. Возвращаемый объект представляет собой строку . В исходном коде x это событие не определено как нечто. Так как все в JavaScript является объектом, вы можете присвоить свойство x к результату, если это defined, но это не тот случай:

var myvar = { 
 
     f: function() { 
 
     var x; 
 
     return x; 
 
     } 
 
    } 
 
    
 
    var a = myvar.f(); 
 
    
 
    document.write(a + "<br />"); 
 
    document.write(Object.prototype.toString.call(a) + "<br />"); //returns [object Undefined]

Так вы заклеивание свойство undefined, которое никогда не устанавливается. Чтобы иметь возможность установить x, вам необходимо сделать это свойство функции myvar. Установка его на method будет работать только в том случае, если вы не вызываете метод. Вызов метода заставляет его возвращать переменную, которая не привязана к самому объекту метода.

1

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

Я также принимаю вас не хочу объект, который возвращается из функции, доступной где-либо еще в родительском объекте.

Для этого вам необходимо изменить способ создания объекта.

var Factory = function() { 
    var _priv = { 
     x: "something" 
    }; 

    return { 
     F: function() { 
      return _priv; 
     } 
    }; 
}; 

var myvar = new Factory(); 

myvar.F().x; // "something" 
myvar.F().x = "hello world"; // "hello world" 

Таким образом, создание исходного объекта немного отличается, но у вас есть желаемые результаты.

Если вы не возражаете, что возвращаемые объекты свойства доступны в другом месте на родительский объект, вы можете сделать это:

var myvar = { 
    _priv: { 
     x: "something" 
    }, 
    F: function() { 
     return this._priv; 
    } 
}; 

myvar.F().x; // "something" 
myvar.F().x = "hello world"; // "hello world" 

Недостатком является, что _priv свойство также доступна на главном объекте:

myvar._priv.x; // "hello world" 

Ответит ли это на ваш вопрос?

+0

это не мой полный ответ, но хороший ide i vite up – Ega

+0

Что мне не хватает, чтобы полностью ответить на ваш вопрос? –