Цитата:
|
Цитата:
F(10).plus(5).minus(3) носит чисто ознакомительный характер и врятли кто-то будет применять её в коде JavaScript-приложения. |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
Вы не могли бы написать корректный код, который можно и нужно применять.
И желательно не на таком простом примере... Давайте разберём вот такой пример: dom("some_id").append("u").text("some text"); пускай код найдёт объект добавит тэг U и добавит текст. |
Да тут все просто :)
function F(node) { this.node = node; } F.prototype = { append: function(arg) { return new F(this.node.appendChild(typeof arg == "string" ? document.createElement(arg) : arg)); }, text: function(str) { if(typeof str == "undefined") return this.node.innerText || this.node.textContent; this.node.innerHTML = ""; this.node.appendChild(document.createTextNode(str)); return this; } }; function dom(arg) { return new F(typeof arg == "string" ? document.getElementById(arg) : arg); } Не могу не прорекламировать в этой теме :D Цепочки вызовов в JavaScript-фреймворке js-core |
Цитата:
Как всё это сделать в рамках одной функции, как в js-core, не разделяя на function F() и function dom() ? |
В js-core, вместо второй функции, рекурсия добавлена, пример будет выглядеть следующим образом:
function dom(arg) { if(this.dom) return new dom(typeof arg == "string" ? document.getElementById(arg) : arg); this.node = arg; } dom.prototype = { append: function(arg) { return new dom(this.node.appendChild(typeof arg == "string" ? document.createElement(arg) : arg)); }, text: function(str) { if(typeof str == "undefined") return this.node.innerText || this.node.textContent; this.node.innerHTML = ""; this.node.appendChild(document.createTextNode(str)); return this; } }; dom(document.body).append("h1").text("It works!"); Используется тот факт, что одна и таже функция может вызываться явным образом и в конструкторе. При вызове явным образом this указывает на window, так определяем, что нужно рекурсивно вызвать эту же фунции в конструкторе с тем же аргументом. |
Octane,
2-й пример почему-то не работает... |
Часовой пояс GMT +3, время: 01:08. |