|
спасибо.
щаз почитаю |
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, время: 20:13. |