Цитата:
|
Цитата:
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, время: 14:37. |