2024 Clojure调查 中分享您的想法!

欢迎!请查看 关于 页面,了解更多关于此事的信息。

0
ClojureScript

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

(defn somfn[elem]
..

(exists? elem.requestFullscreen)

..

无法编译。我收到以下消息 js/elem 是被局部变量遮挡的

我该怎么解决这个问题?

2 个答案

+1
回答 通过
 
最佳答案

在这种情况下,通过常规访问属性进行验证即可,如果属性存在,则返回真值。

(if elem.requestFullScreen ...)

或者稍微正确一点的版本

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

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

+3
by

你可以使用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

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

goog.object/containsKey仅仅是将`in`操作符进行了封装。


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