Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.06.2013, 19:18
Новичок на форуме
Отправить личное сообщение для wrun Посмотреть профиль Найти все сообщения от wrun
 
Регистрация: 04.06.2013
Сообщений: 2

Метод за методом
Добрый день! Подскажите куда копать

сделал:

var a = new function() {
  this.a = function(a) { alert(a) }
  this.gi = function(a) { return document.getElementById(a) }
}


Работает:

a.a(1) и a.gi('id') и конечно a.a(a.gi('id'))

но хотелось бы вот такой синтаксис:

w.gi('id').a()

Я так понимаю это возможно, но куда копать не могу понять...
Ответить с цитированием
  #2 (permalink)  
Старый 04.06.2013, 20:13
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 2,932

var a = function(arg)
{
   if(this.a) return new a(arg);
   if(arg)
   {
      this.arg = arg;
      //code
   }
}

a.prototype = {
   fo: function(b)
   {
      alert(this.arg + b);
      return this;
   },
   gi: function(b)
   {
      alert(this.arg - b);
      return this;
   }
}

a(5).fo(4); //9
a(7).gi(3); //4

a(5).fo(4).gi(3).fo(4).gi(3).fo(4).gi(3).fo(4).gi(3).fo(4).gi(3) //....


Вот ещё, я тут на днях эксперементировал:
var $d = document;

var $E = function(a)
{
	if(this.$E) return new $E(a);
	if(typeof a == 'string')
	{
		var b = a.substr(0,1), c = a.substr(1);
		if(b == '#') this.a = $d.getElementById(c);
		else if(b == '.') this.a = $d.getElementsByClassName(c);
		else this.a = $d.getElementsByTagName(a);
	}
	else this.a = a;
}
$E.prototype = {
	append: function(a)
	{
		if(a) for(i=0; i<this.a.length; i++) this.a[i].innerHTML += a;
		return this;
	},
	attr: function(a, b)
	{
		if(a) for(i=0; i<this.a.length; i++)
		{
			if(typeof a == 'string' && b) this.a[i].setAttribute(a, b);
			if(typeof a == 'object') for(k in a) this.a[i].setAttribute(k, a[k]);
			else if(!b) return this.a[0].getAttribute(a);
		}
		return this;
	},
	delete: function()
	{
		for(i=0; i<this.a.length; i++) this.a[i].parentNode.removeChild(this.a[i]);
		return this;
	},
	fade: function(a, b, c)
	{
		if(a)
		{
			var d = this, e, f;
			for(i=0; i<this.a.length; i++)
			{
				e = e = d.a[i].style;
				e.display = 'block';
				e.transition = 'opacity '+(a/1000)+'s';
				if(e.opacity != '0')
				{
					e.opacity = 0;
					f = 1;
				}
				else e.opacity = 1;
			}
			setTimeout(function()
			{
				if(f) b ? d.delete() : d.style('display', 'none');
				if(c) c(d.a);
			}, a);
		}
		return this;
	},
	html: function(a)
	{
		if(a !== undefined) for(i=0; i<this.a.length; i++) this.a[i].innerHTML = a;
		else return this.a[0].innerHTML;
		return this;
	},
	style: function(a, b)
	{
		if(a) for(i=0; i<this.a.length; i++)
		{
			if(typeof a == 'string' && b) this.a[i].style[a] = b;
			if(typeof a == 'object') for(k in a) this.a[i].style[k] = a[k];
			else if(!b) return this.a[0].style[a];
		}
		return this;
	}	
}


Последний раз редактировалось ruslan_mart, 04.06.2013 в 20:20.
Ответить с цитированием
  #3 (permalink)  
Старый 04.06.2013, 20:26
Новичок на форуме
Отправить личное сообщение для wrun Посмотреть профиль Найти все сообщения от wrun
 
Регистрация: 04.06.2013
Сообщений: 2

Великолепно, огромное спасибо!

Но сразу же уткнулся в следующее:

var w = function(arg) {
	if(this.w) return new w(arg);
	if(arg) {
		this.arg = arg;
	}
}
w.prototype = {
	a: function(a) {
		if(a==undefined) a = this.arg
		alert(a);
		return this;
	},
	gi: function(b) {
		//alert(this.arg - b);
		return this;
	}
}

w(5).a(); // Все работает OK
w.a(9); // Не найдено, только если w.prototype.a(9), а хотелось бы
Ответить с цитированием
  #4 (permalink)  
Старый 04.06.2013, 21:18
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от wrun
w(5).a(); // Все работает OK
w.a(9); // Не найдено, только если w.prototype.a(9), а хотелось бы
w().a() -создаётся объект и вызывается его метод а
w.a() - обращение к "методу а функции", какого у неё нет

var z = w(); // создать экземпляр "класса" w
z.a(9); // вызвать метод a экземпляра

Последний раз редактировалось dmitriymar, 04.06.2013 в 21:33.
Ответить с цитированием
  #5 (permalink)  
Старый 05.06.2013, 04:12
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 2,932

wrun, ну можно так:

w.a = function(a)
{
   alert(a);
}

w.a(10);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JSON или JSONP для запросов на другой сервер? Метод GET, для длинных сообщений? Kotakota jQuery 5 23.08.2011 22:12
Объект не поддерживает это свойство или метод load_081112_0953.js 1auto1 Internet Explorer 1 13.04.2011 20:59
Взятие интеграла методом Симпсона Leks Общие вопросы Javascript 9 27.03.2010 18:38
Как узнать у какого объекта вызван метод. Scalar Events/DOM/Window 4 26.03.2010 10:10
Добавить свой метод к элементу alekciy Events/DOM/Window 6 16.02.2009 18:29