Почему 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, время: 16:42. |