JavaScript short-circuit evaluation은 일반적으로 예를 들어. 브라우저 호환성 처리 :자바 스크립트 단락 평가에 대한 관용구 스칼라 .js 번역
var scrollPosition =
window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0
Scala.js이를 작성하는 관용적 인 방법은 무엇입니까?
JavaScript short-circuit evaluation은 일반적으로 예를 들어. 브라우저 호환성 처리 :자바 스크립트 단락 평가에 대한 관용구 스칼라 .js 번역
var scrollPosition =
window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0
Scala.js이를 작성하는 관용적 인 방법은 무엇입니까?
@ gurghet의 답은 IMO가 가장 관용적 인 버전인데, JavaScript의 숙어를 Scala.js에 채택하는 것입니다. 어쨌든 JavaScript의 동적 인 특성을 이용하고 있기 때문에 이에 대해 명시 적으로 표현할 수도 있습니다. js.Dynamic
으로 할 수 있습니다.
import scala.scalajs.js
import js.Dynamic.{global => g}
def scrollPosition: Double = {
import js.DynamicImplicits._ // to "write JavaScript"
val pos = g.window.pageYOffset || g.document.documentElement.scrollTop || g.document.body.scrollTop || 0
pos.asInstanceOf[Double]
}
나는 당신이 이것에 대한 일반적인 스칼라에서 생각하는 것이 더 좋다고 생각합니다.
특히, 부울에 0의 캐스트를 사용하는 경우이 방법은 그다지 좋지 않지만 암시 적 캐스팅을 가능한 한 드물게 사용하고 바람직하지 않은 경우 의미를 변경하지 않기 때문에 바람직하지 않습니다. 유형.
나는 그것을 훨씬 더 표현이 일치하는 케이스를 사용하거나 중간 단계에 의미를 부여하여 만들 수있는보다 표현 방법으로
var scrollPosition =
if (window.pageYoffset > 0) {
window.pageYoffset
} else if (document.documentElement.scrollTop > 0) {
document.documentElement.scrollTop
} else if (document.body.scrollTop > 0) {
document.body.scrollTop
} else {
0
}
를 과제를 다시 작성합니다.
감사합니다. 'js.DynamicImplicits'는 빠진 조각이었습니다! – netzwerg
비록이 유연성이 좋지만이 코드는 위험하지 않습니까? 극단적 인 경우 런타임 예외가 발생할 수있는 Javascript에서 평범한 가치를 얻는다는 의미입니다. – pietro909
@ pietro909 글쎄, 궁극적으로 * 항상 * 당신이 자바 스크립트에서 어떤 종류의 가치를 가져올 때 무엇을하는지. 귀하의 주장에 따르면 JavaScript 라이브러리 호출은 안전하지 않으므로 금지되어야합니다. – sjrd