Почему 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 }) Подскажите, пожалуйста, почему так получается? И как в таком случае обратиться к свойству объекта в самом объекте? |
Цитата:
Цитата:
выведи this и возможно (вероятность есть) поймёшь, что на что указывает <script> x = { test: "Test string", thisObject: this, thisTest: this.test } alert(this); alert(this.x.test); alert(x.test); </script> |
Цитата:
Там должно быть x.thisObject, конечно. В вашем примере при вызове x.thisObject ожидаемо возвращается Window. Но я по-прежнему не могу понять, как обратиться к свойству объекта в другом его свойстве, если к свойствам не привязан this. Прописывать геттеры и получать свойства через них? |
Цитата:
Цитата:
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()); |
Цитата:
Цитата:
var x = { test: "Test string", thisObject: this, thisTest: function () { return this.test; } } alert(x.test); alert(x.thisTest()); |
Ну или прописать геттер как ты сам предложил (само собой не будет работать в IE8).
|
Цитата:
var x =new function() { this.name='trat'; this.test= "Test string"; this.thisObject=this; this.thisTest=this.test }; alert(x.thisObject) ; alert(x.thisTest) |
var x = { name: 'abc', test: "Test string" }; x.thisObject = x; x.thisTest = x.test; alert(x.thisObject) alert(x.thisTest) |
Часовой пояс GMT +3, время: 04:31. |