Метод за методом
Добрый день! Подскажите куда копать
сделал: 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() Я так понимаю это возможно, но куда копать не могу понять... |
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; } } :) |
Великолепно, огромное спасибо!
Но сразу же уткнулся в следующее: 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), а хотелось бы |
Цитата:
w.a() - обращение к "методу а функции", какого у неё нет var z = w(); // создать экземпляр "класса" w z.a(9); // вызвать метод a экземпляра |
wrun, ну можно так:
w.a = function(a) { alert(a); } w.a(10); |
Часовой пояс GMT +3, время: 04:54. |