|
спасибо.
щаз почитаю |
Gvozd,
Цитата:
Но я не совсем это имел в виду |
no_alex,
так вам мой код подходит, или как? или я вас неправильно понял? |
Gvozd,
Цитата:
У меня как раз цель отказаться от передачи this через аргументы. Я хочу упростить вызов этих методов. С this в аргументах я эту задачу уже решил, но слишком часто приходится писать этот this и хочется эту проблему упростить. Второе, вызовов типа: A.func2.apply(this,[]) у меня не будет. Все методы вызываются у "своих" объектов. И третье, созданные объекты совершенно не обязательно являются свойствами объекта "windows". Мне не известно где они будут располагаться. |
Цитата:
Цитата:
если объект B1 юудет находится в любом другом месте, то в коде ничего не поменяется кроме того, что это сравнение в таком виде будет false выдавать. но this/that все равно будет указывать именно на него, где бы он не был |
Цитата:
В целом идею Вы поняли правильно, только вот если-бы реализовать ее "на автомате". Чтобы this не передавать, а определять автоматически. Цитата:
|
п кажется я понял, что вы хотите теперь:
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()
|
Цитата:
всего лиш 13 лишних символов в ввашем коде? |
вот в таком варианте функции ничего лишнего не передается, и не используется 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()
|
| Часовой пояс GMT +3, время: 14:44. |