Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   как получить ссылку на переменную через аргумент функции? (https://javascript.ru/forum/misc/37052-kak-poluchit-ssylku-na-peremennuyu-cherez-argument-funkcii.html)

_dude01 05.04.2013 21:29

как получить ссылку на переменную через аргумент функции?
 
я хочу знать как реализовать это(если возможно конечно):
function change(variable){
    variable = 10 ;
}
var x = 1 ;
change(x) ;
alert(x) ; //выведет 10

но ничего лучше чем это лучше не придумал
function change(variable){
    window[varible] = 10 ;
}
var x = 1 ;
change("x") ;
alert(x) ;//выведет 10

прошу помощи
заранее спасибо

zebra 05.04.2013 21:35

передайте объект или массив

SV0L0CH 05.04.2013 22:08

Для подобного доступа можно использовать функции
function change(changer){
  changer(10);
}
var x = 1;
change(function(arg){x=arg;});
alert(x);

_dude01 05.04.2013 23:56

Цитата:

Сообщение от SV0L0CH (Сообщение 244469)
Для подобного доступа можно использовать функции
function change(changer){
  changer(10);
}
var x = 1;
change(function(arg){x=arg;});
alert(x);

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

megaupload 06.04.2013 00:26

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

var obj = {x:20};

function change (object){
      object.x = 11;
}

alert(obj.x); //20
change(obj);
alert(obj.x); //11

danik.js 06.04.2013 05:57

_dude01, не понимаешь в чем-то? Проверь прежде чем утверждать!

function change(changer){
  changer(10);
}
var x = 1;
change(function(arg){x=arg;});
alert(x);

SV0L0CH 06.04.2013 11:45

Давно мечтаю о сахаре для такого:
var x;
function setX(_){x=_;}
function getX(){return x;}
function accessX(_){
  if(arguments.length)
    x=_;
  return x;
}

megaupload 06.04.2013 12:23

SV0L0CH,
сеттеры и геттеры не , не слышал?

_dude01 06.04.2013 12:32

в JS в них нет смысла

_dude01 06.04.2013 12:40

Цитата:

Сообщение от danik.js (Сообщение 244498)
_dude01, не понимаешь в чем-то? Проверь прежде чем утверждать!

function change(changer){
  changer(10);
}
var x = 1;
change(function(arg){x=arg;});
alert(x);

в этом просто нет смысла
тоже само что и
function change(arg) {
    x = arg;
}
var x = 1 ;
change(10) ;
alert(x) ;

megaupload 06.04.2013 13:21

_dude01,
если "реализовать твою просьбу" представить как смысл, то этот смысл реализуется, и в этом есть смысл.

Цитата:

Сообщение от _dude01
в JS в них нет смысла

в js в них есть смысл

melky 06.04.2013 13:34

Цитата:

Сообщение от _dude01
но ничего лучше чем это лучше не придумал

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

[[PrimitiveValue]] у числа заменить не удастся, ибо это скрытые кишки объекта

или можно замутить такие приколы, до которых рука дотягивается
function change(variable){
    variable.valueOf = variable.toString = function () { return 10; };
}

var x = new Number(1);

change(x) ;

alert(x) ; //выведет 10, тут исп-я toString

alert( x / 10 ); // выведет 1, тут исп-я valueOf

_dude01 06.04.2013 14:30

а в чём разница между
var x = 1;
//и
var x = new Number(1);
?

megaupload 06.04.2013 14:35

в первом случае примитив, во втором обьект.

Слушай ты чо тупой то какой тебе же сказали решение, чо непонятного?

Примитивное значение по ссылке передать ни как. Все? вопрос исчерпан?

Судя по вашему сообщению, вы ну совсем не знаете javascript.

Освойте основы языка и вопрос отпадет сам, полностью или частично.
А с чем не справитесь - поможем.

На сайте javascript можно начать изучать с учебника, раздел Основы javascript.
Возможно, вам также понадобится HTML - учебник есть, например, здесь: http://ru.html.net/tutorials/html/

Задавайте конкретные вопросы по ходу дела.

_dude01 06.04.2013 14:35

Цитата:

Сообщение от megaupload (Сообщение 244529)
_dude01,
если "реализовать твою просьбу" представить как смысл, то этот смысл реализуется, и в этом есть смысл.


в js в них есть смысл

нету вить в JS нет приватных переменных

megaupload 06.04.2013 15:34

А вот и есть и образуются они общепринятым неймспейсом "_"

function Cat() {

	Object.defineProperties(this, {

		_name: {writable: true},

		name: {
			get       : function () {
				return this._name;
			},
			set       : function (value) {
				return this._name = value;
			}
		}

	});

}

var cat = new Cat;

cat.name = "Ашот";
alert(cat.name);

melky 07.04.2013 08:35

Цитата:

Сообщение от megaupload
А вот и есть и образуются они общепринятым неймспейсом "_"

и в дополнение к сжатию Google Closure Compiler в advanced mode эти "приватные" переменные меняют свои имена, либо вообще инлайнятся - получается неплохо

megaupload 07.04.2013 12:58

это типа побочный эффект чего-то или так задуманно)?
надо ли для них писать jsdoc сверху?

melky 07.04.2013 13:06

Цитата:

Сообщение от megaupload (Сообщение 244638)
это типа побочный эффект чего-то или так задуманно)?
надо ли для них писать jsdoc сверху?

побочный эффект продвинутой минификации

megaupload 07.04.2013 13:35

Не, я имею ввиду они НАМЕРЕННО так делают? или это случайно так получается

melky 07.04.2013 14:58

конечно намерено - чтобы меньше букв в минифицированном коде было

megaupload 07.04.2013 17:16

а что весомей jsdoc или это _
если будет написано

@public
_ololo

то что победит?

melky 07.04.2013 18:43

он не понимает @public — там немного обрезанный JSDOC

оба срежутся

maxSLON 09.02.2015 10:08

А можно угарнуть вот так :)
Number.prototype.ai = function(){
return JSON.stringify(this)*1;
};
console.log((123123).ai());


Часовой пояс GMT +3, время: 08:23.