Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Почему this объекта выдает весь документ? (https://javascript.ru/forum/jquery/39553-pochemu-obekta-vydaet-ves-dokument.html)

rumwi 03.07.2013 21:31

Почему 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

})


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

bes 03.07.2013 22:30

Цитата:

Сообщение от 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>

rumwi 03.07.2013 23:05

Цитата:

Сообщение от rumwi (Сообщение 259989)
alert(x.this) // -> [Object HTMLDocument]

Да, здесь я действительно ерунду написал. Извиняюсь.
Там должно быть x.thisObject, конечно.

В вашем примере при вызове x.thisObject ожидаемо возвращается Window. Но я по-прежнему не могу понять, как обратиться к свойству объекта в другом его свойстве, если к свойствам не привязан this.
Прописывать геттеры и получать свойства через них?

bes 04.07.2013 00:07

Цитата:

Сообщение от 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());

bes 04.07.2013 00:28

Цитата:

Сообщение от rumwi
Но я по-прежнему не могу понять, как обратиться к свойству объекта в другом его свойстве, если к свойствам не привязан this.

да, забыл сказать, что при использовании литерала объекта - никак, так как
Цитата:

Сообщение от bes
функция создаёт новый контекст

поэтому максимум можно сделать это
var x = {
	test: "Test string",
	thisObject: this,
	thisTest: function () {
		return this.test;
	}
}

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

danik.js 04.07.2013 05:26

Ну или прописать геттер как ты сам предложил (само собой не будет работать в IE8).

vadim5june 04.07.2013 06:10

Цитата:

Сообщение от 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)

danik.js 04.07.2013 07:01

var x = {
    name: 'abc',
    test: "Test string"
};
x.thisObject = x;
x.thisTest = x.test;
 
alert(x.thisObject)
alert(x.thisTest)


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