Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как обратиться к объекту изнутри во время объявления элементов (https://javascript.ru/forum/misc/44170-kak-obratitsya-k-obektu-iznutri-vo-vremya-obyavleniya-ehlementov.html)

shaltay 09.01.2014 18:09

Как обратиться к объекту изнутри во время объявления элементов
 
Доброго времени. Возможно ли обратиться к объекту из него же самого?

var obj = {
		test: 2,
		test2: func(this)
	}

	function func(o){
		return o.test*3
	}
	console.log(obj)

BallsShaped 09.01.2014 18:21

Видимо, так:
var obj = {
    test: 2,
    test2: func
}
 
function func(){
    return this.test * 3;
}
console.log(obj)

kobezzza 09.01.2014 18:33

var obj = {
    test: 2,
    get test2() {
        return this.test * 3;
    }
};

alert(obj.test2);


А вообще:
http://dmitrysoshnikov.com/ecmascrip...the-core/#this

Яростный Меч 09.01.2014 19:10

var obj = {
        test: 2
    };
    obj.test2 = func(obj);
    function func(o){
        return o.test*3;
    }

shaltay 10.01.2014 11:18

@BallsShaped - Ваш вариант возвращает саму функцию. а не результат.

@kobezzza - интересное работающее решение. А что значит get?

рони 10.01.2014 11:50

Цитата:

Сообщение от shaltay
А что значит get?

Нестандартное использование Get и Set в Javascript
Дескриптор свойства, геттеры и сеттеры

shaltay 10.01.2014 15:34

Спасибо. Но в итоге я решил юзать функции внутри объекта. В следствии чего наткнулся на новый камень:

здесь jquery:

function calc(x){

  var obj = {

  test:   function(){
    return 2
  },
  test2:   function(){
    return this.test() * x
  }

 }

  return obj;

}

$.each(calc(5),function(k,v){
  console.log(k)
  console.log(v())
})


Выдает ошибку что метода test не существует. Хотя если вызвать console.log(calc(5).test2()) то работает хорошо.

kobezzza 10.01.2014 17:21

Цитата:

Сообщение от shaltay (Сообщение 291445)
Спасибо. Но в итоге я решил юзать функции внутри объекта. В следствии чего наткнулся на новый камень:

здесь jquery:

function calc(x){

  var obj = {

  test:   function(){
    return 2
  },
  test2:   function(){
    return this.test() * x
  }

 }

  return obj;

}

$.each(calc(5),function(k,v){
  console.log(k)
  console.log(v())
})


Выдает ошибку что метода test не существует. Хотя если вызвать console.log(calc(5).test2()) то работает хорошо.

Я уже давал тебе ссылку

Просто ты не понимаешь как работает this, вот у тебя и проблемы.

shaltay 16.01.2014 10:47

Да, скорее всего не понимаю. Тогда помогите представить мой алгоритм правильно.
Имеются n параметров, которые зависят друг от друга.
Например:

function params(x){
   return {
      a: x,
      b: a/2,
      c: a+b,
      ...
      n: m*l*k/j 
   }
}

$.each(params(2),function(k,v){
   $('#'+k).val(v)
})


Надо чтобы все эти параметры можно было вызвать в цикле.


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