19.03.2009, 17:45
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
|
|
19.03.2009, 17:46
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
спасибо.
щаз почитаю
|
|
19.03.2009, 18:01
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
no_alex,
так вам мой код подходит, или как?
или я вас неправильно понял?
|
|
19.03.2009, 18:06
|
Аспирант
|
|
Регистрация: 20.08.2008
Сообщений: 56
|
|
Gvozd,
Цитата:
|
если я правильно понял вашу задачу, то вот два варианта решения:
|
Не совсем правильно...
У меня как раз цель отказаться от передачи this через аргументы. Я хочу упростить вызов этих методов. С this в аргументах я эту задачу уже решил, но слишком часто приходится писать этот this и хочется эту проблему упростить.
Второе, вызовов типа:
A.func2.apply(this,[])
у меня не будет. Все методы вызываются у "своих" объектов.
И третье, созданные объекты совершенно не обязательно являются свойствами объекта "windows". Мне не известно где они будут располагаться.
Последний раз редактировалось no_alex, 19.03.2009 в 18:08.
|
|
19.03.2009, 18:13
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от no_alex
|
Второе, вызовов, типа:
A.func2.apply(this,[])
у меня не будет все методы вызываются у "своих" объектов.
|
это на каком языке.отдалено напоминает русский.попробуйте выразить эту мысль по другому, потому что я вас не понимаю
Сообщение от no_alex
|
И третье, созданные объекты совершенно не обязательно являются свойствами объекта "windows". Мне не известно где они будут располагаться.
|
глупость сказали.я написал сравнение с window.B1 Только для того чтобы показать что объект this/that в каждом случае указывает именно на объект его вызвавший.
если объект B1 юудет находится в любом другом месте, то в коде ничего не поменяется кроме того, что это сравнение в таком виде будет false выдавать. но this/that все равно будет указывать именно на него, где бы он не был
|
|
19.03.2009, 18:18
|
Аспирант
|
|
Регистрация: 20.08.2008
Сообщений: 56
|
|
Цитата:
|
я написал сравнение с window.B1
|
Сорри. Я понял - это чисто для проверки.
В целом идею Вы поняли правильно, только вот если-бы реализовать ее "на автомате". Чтобы this не передавать, а определять автоматически.
Цитата:
|
попробуйте выразить эту мысль по другому, потому что я вас не понимаю
|
В Вашем примере Вы вызываете метод обекта A, так чтобы this указывал на другой объект. Я таких вызавов не планирую. Во всех методах обекта A, this всегда должен указывать на объект A.
Последний раз редактировалось no_alex, 19.03.2009 в 18:33.
|
|
19.03.2009, 18:20
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
п кажется я понял, что вы хотите теперь:
A=
{
'func':function(that)
{
//that указывает на объект, вызвавший функцию
with(that)
{
alert(a)
//тут переменная a является свойством a вызвавшего объекта
}
},
'func2':function()
{
//this указывает на объект, вызвавший функцию
with(this)
{
alert(b)
//тут переменная a является свойством b вызвавшего объекта
}
}
}
B_proto=
{
'function':function()
{
console.log([this,this==window.B1,this==window.B2])//this указывает на B1, вызвавший функцию
A.func(this)
A.func2.apply(this,[])
}
}
function B()
{
//functio
this.a='qwerty';
this.b='йцукен';
}
B.prototype=B_proto;
B1=new B();
B1.function()
B2=new B();
B2.a='asdfgh'
B2.b='фывапр'
B2.function()
|
|
19.03.2009, 18:21
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от no_alex
|
В целом идею Вы поняли правильно, только вот если-бы реализовать ее "на автомате". Чтобы this не передавать, а определять автоматически.
|
а чем вам метод с apply -то не годится.ю
всего лиш 13 лишних символов в ввашем коде?
|
|
19.03.2009, 18:29
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
вот в таком варианте функции ничего лишнего не передается, и не используется apply
A=
{
'func':function()
{
// тут this указывает на вызвавший объект
alert(this.a)
with(this)
{
alert(a)
}
}
}
B_proto=
{
'function':function()
{
this.func()
},
'func':A.func,
}
function B()
{
//functio
this.a='qwerty';
}
B.prototype=B_proto;
B1=new B();
B1.function()
B2=new B();
B2.a='asdfgh'
B2.function()
|
|
|
|