请在2024 Clojure状态调查!分享您的想法。

欢迎!请查看关于页面以了解有关此工作的一些更多信息。

0
in ClojureScript by

我的函数必须接收一个文档元素并调用element.webkitRequestFullscreen()
或element.mozRequestFullscreen (),具体取决于浏览器。

(defn somfn[elem]
..

(exists? elem.requestFullscreen)

..

无法编译。我得到此消息js/elem被局部变量覆盖

我该如何修复这个问题?

2 答案

+1
by
selected by
 
最佳答案

在返回真实值的情况下,可以通过常规访问检查属性

(if elem.requestFullScreen ...)

或者稍微更正确一点的方式

(if (.-requestFullScreen elem) ...)

这些方法在属性可能存在但可能为nilfalse的情况下不起作用。

+3

您可以使用 goog.object API

`
(ns my.app
(:require [goog.object :as gobj]))
(defn somefn
[elem]
(if (gobj/containsKey elem "requestFullscreen")

...))

`

https://google.github.io/closure-library/api/goog.object.html

是的,在JavaScript中使用 in 操作符:`if ("requestFullscreen" in elem)`,但在cljs中不支持。

goog.object/containsKey 只是对 in 操作符的封装。


goog.object.containsKey = function(obj, key) {
  return obj !== null && key in obj;
};
...