Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.01.2014, 00:07
Новичок на форуме
Отправить личное сообщение для ukhov Посмотреть профиль Найти все сообщения от ukhov
 
Регистрация: 16.01.2014
Сообщений: 2

Вызов глобального this
var obj = {
 'name': 'abc',
 'subobj': {
  'a': function() {
   alert(this.name); // abc
  }
 }
}

Как такое реализовать? Не через obj.name, а как-нибудь через this или что-то подобное.
Ответить с цитированием
  #2 (permalink)  
Старый 17.01.2014, 00:24
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

ukhov, оно?
'a': function() {
   alert(window.name); 
  }


а лучше прочитайте http://learn.javascript.ru/function-basics и разберитесь сами
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #3 (permalink)  
Старый 17.01.2014, 15:58
Новичок на форуме
Отправить личное сообщение для ukhov Посмотреть профиль Найти все сообщения от ukhov
 
Регистрация: 16.01.2014
Сообщений: 2

так window.* - это внешние переменные, а мне нужно в этом объекте
Ответить с цитированием
  #4 (permalink)  
Старый 17.01.2014, 19:21
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

ukhov, хм, увидел, не сразу понял.
Можно через bind или call (apply), но лучше скажите зачем?
Если что бы не писать имя obj каждый раз то можно просто завести переменную self и записать тyда obj
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #5 (permalink)  
Старый 18.01.2014, 01:19
Новичок на форуме
Отправить личное сообщение для ArtJS Посмотреть профиль Найти все сообщения от ArtJS
 
Регистрация: 29.12.2013
Сообщений: 7

Цитата:
переменную self и записать тyда obj
А будет ли она видна из внутри функции вложенного объекта?
Я вот ранее с JS не сталкивался, думал ерундовая задачка, как два байта переслать, ан нет!
Уже пол часа ковыряю, тоже заинтересовало и что-то не удается достучаться из той функции к self

var obj = {
                name: 'abc',
                self: this,
                subobj : {
                    a: function() {
                        alert(self.name); // тут я пробовал разное даже поля прописывал в subobj но ничего не вышло
                    }
                }
            }

В условии сказано, что передовать в функцию аргумент нельзя, и как тогда?

Последний раз редактировалось ArtJS, 18.01.2014 в 01:23.
Ответить с цитированием
  #6 (permalink)  
Старый 18.01.2014, 01:53
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

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

var obj = {name: 'abc', self: this};

// тут может быть туева хуча кода и внезапно

obj.subobj : {a: function() {alert(self.name);}};


Я сам в JS слаб на оба полушария, но если разведка донесла правду, то объекты без конструктора суксь и мастдай. Я блин как осел мучился с этими идиотскими зисами, повелся, типа на "статику", а оказалось в "динамике" в стопицот раз все проще. Чего и вам желаю.
Ответить с цитированием
  #7 (permalink)  
Старый 18.01.2014, 03:23
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

ArtJS, что за наркомания?

var obj = {
 'name': 'abc',
 'subobj': {
  'a': function() {
   var self = obj;
   alert(self.name); // abc
  }
 }
}


или

var obj = {
 'name': 'abc',
 'subobj': {
  parent: obj
  'a': function() {
   alert(this.parent.name); // abc
  }
 }
}
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #8 (permalink)  
Старый 18.01.2014, 03:58
Новичок на форуме
Отправить личное сообщение для ArtJS Посмотреть профиль Найти все сообщения от ArtJS
 
Регистрация: 29.12.2013
Сообщений: 7

Про var self = obj; признаться недодумался, спасибо! Просто JS специфический язык, не похожий на классическое представление ООП.
А вот ваш второй пример ничего не выводит, в отличие от первого примера.
И кстати, тогда уж и просто
alert(obj.name);
прокатит.
Это повезло что мы объявили этот объект.
А если создавать их несколько с помощью конструктора еще не факт, что прокатит.

Последний раз редактировалось ArtJS, 18.01.2014 в 04:04.
Ответить с цитированием
  #9 (permalink)  
Старый 18.01.2014, 06:10
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Как можно не догадаться до хардкора в условиях профтыкания массивов в массив ?
Ответить с цитированием
  #10 (permalink)  
Старый 18.01.2014, 07:14
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от ArtJS
Просто JS специфический язык, не похожий на классическое представление ООП.
А как в классическом ООП решается эта проблема?
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
?!Множественный вызов contextMenu!? fen0man jQuery 3 22.05.2012 10:02
Двойной вызов функции Tmin10 jQuery 8 08.12.2011 15:19
Многократный вызов звука.. ProniK Общие вопросы Javascript 2 11.01.2010 14:50
Явный вызов процедуры обработки события. supchik Общие вопросы Javascript 18 27.01.2009 13:16