Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Overloading в JavaScript (https://javascript.ru/forum/misc/3116-overloading-v-javascript.html)

Kolyaj 19.03.2009 17:45

http://ru.wikipedia.org/wiki/%D0%A8%...BD%D0%B8%D1%8F

Gvozd 19.03.2009 17:46

спасибо.
щаз почитаю

no_alex 19.03.2009 17:51

Gvozd,
Цитата:

что такое паттерн делегатор?
http://ru.wikipedia.org/wiki/%D0%A8%...BD%D0%B8%D1%8F
Но я не совсем это имел в виду

Gvozd 19.03.2009 18:01

no_alex,
так вам мой код подходит, или как?
или я вас неправильно понял?

no_alex 19.03.2009 18:06

Gvozd,
Цитата:

если я правильно понял вашу задачу, то вот два варианта решения:
Не совсем правильно...
У меня как раз цель отказаться от передачи this через аргументы. Я хочу упростить вызов этих методов. С this в аргументах я эту задачу уже решил, но слишком часто приходится писать этот this и хочется эту проблему упростить.

Второе, вызовов типа:
A.func2.apply(this,[])

у меня не будет. Все методы вызываются у "своих" объектов.

И третье, созданные объекты совершенно не обязательно являются свойствами объекта "windows". Мне не известно где они будут располагаться.

Gvozd 19.03.2009 18:13

Цитата:

Сообщение от no_alex
Второе, вызовов, типа:
A.func2.apply(this,[])
у меня не будет все методы вызываются у "своих" объектов.

это на каком языке.отдалено напоминает русский.попробуйте выразить эту мысль по другому, потому что я вас не понимаю

Цитата:

Сообщение от no_alex
И третье, созданные объекты совершенно не обязательно являются свойствами объекта "windows". Мне не известно где они будут располагаться.

глупость сказали.я написал сравнение с window.B1 Только для того чтобы показать что объект this/that в каждом случае указывает именно на объект его вызвавший.
если объект B1 юудет находится в любом другом месте, то в коде ничего не поменяется кроме того, что это сравнение в таком виде будет false выдавать. но this/that все равно будет указывать именно на него, где бы он не был

no_alex 19.03.2009 18:18

Цитата:

я написал сравнение с window.B1
Сорри. Я понял - это чисто для проверки.

В целом идею Вы поняли правильно, только вот если-бы реализовать ее "на автомате". Чтобы this не передавать, а определять автоматически.

Цитата:

попробуйте выразить эту мысль по другому, потому что я вас не понимаю
В Вашем примере Вы вызываете метод обекта A, так чтобы this указывал на другой объект. Я таких вызавов не планирую. Во всех методах обекта A, this всегда должен указывать на объект A.

Gvozd 19.03.2009 18:20

п кажется я понял, что вы хотите теперь:
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()

Gvozd 19.03.2009 18:21

Цитата:

Сообщение от no_alex
В целом идею Вы поняли правильно, только вот если-бы реализовать ее "на автомате". Чтобы this не передавать, а определять автоматически.

а чем вам метод с apply -то не годится.ю
всего лиш 13 лишних символов в ввашем коде?

Gvozd 19.03.2009 18:29

вот в таком варианте функции ничего лишнего не передается, и не используется 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.