Javascript.RU

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

Почему this объекта выдает весь документ?
Здравствуйте.
Пожалуйста, помогите разобраться с this. объекта.

Имеется следующий код:

$(document).ready(function(){

var x = {
	name: $("#project td.first").text(),
	test: "Test string",
	thisObject: this,
    thisTest = this.test
        }

alert(x.thisObject) // -> [Object HTMLDocument]
alert(x.thisTest) // -> undefined

})


Подскажите, пожалуйста, почему так получается? И как в таком случае обратиться к свойству объекта в самом объекте?

Последний раз редактировалось rumwi, 03.07.2013 в 22:43.
Ответить с цитированием
  #2 (permalink)  
Старый 03.07.2013, 22:30
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от rumwi
thisTest = this.test
Сообщение от rumwi
alert(x.this) // -> [Object HTMLDocument]
врёшь и не краснеешь

выведи this и возможно (вероятность есть) поймёшь, что на что указывает
<script>
x = {
	test: "Test string",
	thisObject: this,
    thisTest: this.test
        }

alert(this);
alert(this.x.test);
alert(x.test);
</script>
Ответить с цитированием
  #3 (permalink)  
Старый 03.07.2013, 23:05
Новичок на форуме
Отправить личное сообщение для rumwi Посмотреть профиль Найти все сообщения от rumwi
 
Регистрация: 03.07.2013
Сообщений: 2

Сообщение от rumwi Посмотреть сообщение
alert(x.this) // -> [Object HTMLDocument]
Да, здесь я действительно ерунду написал. Извиняюсь.
Там должно быть x.thisObject, конечно.

В вашем примере при вызове x.thisObject ожидаемо возвращается Window. Но я по-прежнему не могу понять, как обратиться к свойству объекта в другом его свойстве, если к свойствам не привязан this.
Прописывать геттеры и получать свойства через них?
Ответить с цитированием
  #4 (permalink)  
Старый 04.07.2013, 00:07
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от rumwi
Да, здесь я действительно ерунду написал. Извиняюсь.
Сообщение от rumwi
thisTest = this.test
а здесь, конечно, нет

http://learn.javascript.ru/this
и множество других статей, где описано с чем это едят

основа - функция создаёт новый контекст и this определяется во время вызова
в твоём примере контекстом является объект document, ты вызываешь функцию (метод) ready этого объекта, this соответственно указывает на него
у меня контекстом является window

<script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
<script>
$(document).ready(function(){

var x = {
	//name: $("#project td.first").text(),
	test: "Test string",
	thisObject: this,
    thisTest :this.test
        }

alert(this) // -> [Object HTMLDocument]
alert(console.log(this)) // -> undefined

})
</script>


function X() {
	var that = this;
	this.test = "Test string";
	this.thisTest1 = function (str) {
		return this.test + str;
	}
	this.thisTest2 = function (str) {
		return this.thisTest1(that.test);
	}
	this.thisTest3 = function () {
		return this.thisTest1.call(this, this.test);
	}
}
alert(new X().test);
alert(new X().thisTest1(1));
alert(new X().thisTest2());
alert(new X().thisTest3());
Ответить с цитированием
  #5 (permalink)  
Старый 04.07.2013, 00:28
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от rumwi
Но я по-прежнему не могу понять, как обратиться к свойству объекта в другом его свойстве, если к свойствам не привязан this.
да, забыл сказать, что при использовании литерала объекта - никак, так как
Сообщение от bes
функция создаёт новый контекст
поэтому максимум можно сделать это
var x = {
	test: "Test string",
	thisObject: this,
	thisTest: function () {
		return this.test;
	}
}

alert(x.test);
alert(x.thisTest());

Последний раз редактировалось bes, 04.07.2013 в 00:30.
Ответить с цитированием
  #6 (permalink)  
Старый 04.07.2013, 05:26
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Ну или прописать геттер как ты сам предложил (само собой не будет работать в IE8).
Ответить с цитированием
  #7 (permalink)  
Старый 04.07.2013, 06:10
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от rumwi
Подскажите, пожалуйста, почему так получается? И как в таком случае обратиться к свойству объекта в самом объекте?
var x =new function() {
this.name='trat';
this.test= "Test string";
this.thisObject=this;
this.thisTest=this.test
};
alert(x.thisObject) ;
alert(x.thisTest)
Ответить с цитированием
  #8 (permalink)  
Старый 04.07.2013, 07:01
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

var x = {
    name: 'abc',
    test: "Test string"
};
x.thisObject = x;
x.thisTest = x.test;
 
alert(x.thisObject)
alert(x.thisTest)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Свойства объекта, методы и this. Почему свойство вызывается с () ? jsuse Общие вопросы Javascript 2 04.11.2011 20:39
Как удалить из памяти весь XML документ? EisBerg Events/DOM/Window 1 03.04.2010 14:45
Общий обработчик ошибок на весь документ. Casufi jQuery 3 10.02.2010 16:08
Повесить событие click (jQuery) на весь документ, кроме нескольких элементов dabutch Events/DOM/Window 2 12.11.2009 19:52
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 19:00