JavaScript의 Cascade-esq 표기법?
Cascade Notation
라고 부릅니다.다음은 둘러보기의 코드 예입니다.
querySelector('#confirm') // Get an object.
..text = 'Confirm' // Use its members.
..classes.add('important')
..onClick.listen((e) => window.alert('Confirmed!'));
번역:
var button = querySelector('#confirm');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));
자, 예쁘지 않나요? 😆
Dart의 구문에 대한 JavaScript의 영향은 매우 분명합니다. 마치 Dart가 전체에 누텔라가 묻은 Javascript인 것처럼 보입니다.
따라서 Dart에는 JavaScript에 비해 침을 흘리게 만드는 몇 가지 기능이 있습니다! 🤤
내 문제
JavaScript에서 프로그래밍 방식으로 요소를 빌드하고 일부
parent
요소에 채우는 것은 매우 일반적입니다. 이렇게:let anchor = document.createElement('a');
anchor.href = data.link;
anchor.innerText = data.caption
anchor.classList.add(data.type)
parent.appendChild(anchor)
anchor.someProp
를 입력해야 하는 것은 항상 저를 괴롭혔습니다. 나는 우리에게 그런 것이 있었으면 좋겠지만 Cascade Notation
, 슬프게도 우리는 그렇지 않습니다. 그리고 그게 내 문제야.내 솔루션 - 모두 사슬로 묶으세요!
나는 단순히 연결하는 클래스를 만들고 요소를 반환하는
.build()
메서드를 가질 것입니다. 다음과 같은 것:parent.appendChild(
new Link() // Returns a chainable builder
.to(data.link)
.text(data.caption)
.type(data.type)
.build() // Finally, returns anchor element
)
이제 어떻게 구현할까요?
Chainable objects은 수년 동안 주변에 있었고 꽤 잘 알려져 있습니다. 그리고 여기 내가 그것들을 구성하는 방법이 있습니다.
먼저 도움이 되는 카레 기능(check Currying )을 만듭니다.
let chainer = (ctx) => (mutator) => (...args) => {
mutator.apply(ctx, args)
return ctx
}
여기,
ctx
는 mutator
는 ctx...args
는 mutator그런 다음 빌더를 만듭니다.
let Link = function () {
let linker = chainer(this)
let config = {
to: "",
text: "",
type: "",
}
this.config = config
this.to = linker((link) => {
config.to = link
})
this.text = linker((text) => {
config.text = text
})
this.type = linker((type) => {
config.type = type
})
this.build = () => {
let a = document.createElement("a")
a.href = config.to
a.innerText = config.text
!!config.type && a.classList.add(config.type)
return a
}
}
짜잔! 끝났어요 (︶^︶)
용법
말 그대로 누텔라를 바르는 것처럼 어디서나 사용할 수 있습니다. 😋
document.body.appendChild(
new Link()
.to("http://localhost")
.text("home sweet home")
.build()
)
시도하시겠습니까?
미주
야 독자! 이것은 JavaScript를 사용하여 계단식 구문을 재현하려는 나의 방법이었습니다. 더 나은 방법이 있다면... 모두와 공유하십시오!
건배~
Reference
이 문제에 관하여(JavaScript의 Cascade-esq 표기법?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/keogami/cascade-esq-notation-in-javascript-2agp텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)