首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

CLJS:将JS属性设置为对其调用方法的结果

CLJS是ClojureScript的缩写,它是Clojure语言的一个方言,专门用于在JavaScript环境中进行开发。Clojure是一种函数式编程语言,它运行在Java虚拟机上,而ClojureScript则是Clojure的一个编译器,将Clojure代码编译成JavaScript代码。

将JS属性设置为对其调用方法的结果是一种常见的编程技巧,可以通过使用函数调用操作符(())来实现。具体而言,可以通过将一个函数赋值给一个对象的属性,然后在需要的时候调用该属性来执行函数。

这种技巧的一个常见应用场景是在JavaScript中模拟私有成员。由于JavaScript没有内置的私有成员机制,可以通过将一个函数赋值给对象的属性,并在该函数内部定义私有变量和方法来实现类似的效果。

以下是一个示例代码:

代码语言:txt
复制
var obj = {
  privateVar: 10,
  getPrivateVar: function() {
    return this.privateVar;
  }
};

console.log(obj.getPrivateVar()); // 输出 10

在上面的代码中,getPrivateVar属性被设置为一个函数,该函数返回privateVar属性的值。通过调用obj.getPrivateVar(),可以获取到privateVar的值。

对于CLJS来说,可以使用类似的方式来实现相同的效果。由于ClojureScript是一种函数式编程语言,它更加强调不可变性和纯函数的概念,因此在实践中可能会使用不同的方式来处理类似的需求。

关于CLJS的更多信息和相关产品,您可以参考腾讯云的文档和资源:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

(cljsrun-at (->JSVM :browser) 语言基础)

前言  两年多前知道cljs存在时十分兴奋,但因为工作中根本用不上,国内也没有专门职位于是搁置了探索。...return dividend - divisor * Math.trunc(dividend/divisor) }  至于次方,开方和对数等则要调用JS中Math所提供方法了!...; 次方 (js/Math.pow d e) ; 开方 (js/Math.sqrt n) 可以注意到调用JS方法时只需以js/开头即可,是不是十分方便呢!...; 调用JS函数,以下两种形式是等价。但注意第二种,第一个参数将作为函数上下文,和python方法相似。...") ;-> 返回nil,而不会报异常 ; 有用过Ramda.js同学看到这个时第一感觉则不就是R.compose(R.view, R.lensPath)吗^_^ ; 设置JS对象属性值,以下两种形式是等价

2.9K70

Chrome Extension in CLJS —— 搭建开发环境

,然后运行结果回显到客户端。...设置advanced后编译优化,将作品发布时发现类似于如下报错 Uncaught TypeError: sa.B is not a function 这究竟是什么回事呢?...开发时最多就是optimizations设置simple,这时标识符并没有被压缩,所以如chrome.runtime.onMessage.addListener等外部定义标识符依然是原装。...但启用advanced编译模式后,由于上述外部标识符定义并不纳入GCC编译范围,因此GCC仅仅调用部分代码压缩了,而定义部分还是原封不动,那么在运行时调用中自然而然就找不到相应定义咯。...Cljs早已为我们找到了解决办法,那就是添加extern文件,extern文件中描述外部函数、变量等声明,那么GCC根据extern中声明将不对调用代码中同签名标识符作压缩。

2.1K60
  • Chrome Extension in CLJS —— 搭建开发环境

    ,然后运行结果回显到客户端。...设置advanced后编译优化,将作品发布时发现类似于如下报错 Uncaught TypeError: sa.B is not a function 这究竟是什么回事呢?...开发时最多就是optimizations设置simple,这时标识符并没有被压缩,所以如chrome.runtime.onMessage.addListener等外部定义标识符依然是原装。...但启用advanced编译模式后,由于上述外部标识符定义并不纳入GCC编译范围,因此GCC仅仅调用部分代码压缩了,而定义部分还是原封不动,那么在运行时调用中自然而然就找不到相应定义咯。...Cljs早已为我们找到了解决办法,那就是添加extern文件,extern文件中描述外部函数、变量等声明,那么GCC根据extern中声明将不对调用代码中同签名标识符作压缩。

    1.7K20

    (cljsrun-at (JSVM. :all) 一次说白DataType、Record和Protocol)

    定义数据结构从Data Type和Record开始  提及数据结构很自然就想起C语言中struct,结构中只有字段并没有定义任何方法,而这也是deftype和defrecord最基础玩法。...对于编程领域模型(如String等),我们可以采用deftype来定义,从而提供特殊化能力;但对于应用领域模型而言,我们应该进行抽象,从而采用已有的工具(如assoc,filter等)进行加工,...并且对于应用领域模型而言,一切属性应该均是可被访问,并不存在私有的需要,因为一切属性均为不可变哦。...实例追加Protocol实现 specify可为不可变(immutable)和可复制(copyable,实现了ICloneable)值,追加指定Protocol实现。...其实就是向cljs值追加啦!

    79680

    (cljsrun-at (JSVM. :all) 一次说白DataType、Record和Protocol)

    定义数据结构从Data Type和Record开始  提及数据结构很自然就想起C语言中struct,结构中只有字段并没有定义任何方法,而这也是deftype和defrecord最基础玩法。...对于编程领域模型(如String等),我们可以采用deftype来定义,从而提供特殊化能力;但对于应用领域模型而言,我们应该进行抽象,从而采用已有的工具(如assoc,filter等)进行加工,...并且对于应用领域模型而言,一切属性应该均是可被访问,并不存在私有的需要,因为一切属性均为不可变哦。...实例追加Protocol实现 specify可为不可变(immutable)和可复制(copyable,实现了ICloneable)值,追加指定Protocol实现。...其实就是向cljs值追加啦!

    47740

    (cljsrun-at (JSVM. :all) 细说函数)

    其中附加:private和defn-定义函数目的是一样,就是函数访问控制设置private(默认为public),但可惜cljs现在还不支持:private,所以还是要用名称来区分访问控制策略...clj/cljs我们提供Multimethods这一杀技——不但可以根据类型调用不同函数实现,还可以根据以下内容呢!...(ns cljs.user) ;; Symbole, `b会展开cljs.user/b (derive 'dummy/a `b) ;; Keyword, ::a会展开cljs.user/:a (derive...Condition Map  对于动态类型语言而言,当入参不符合函数定义所期待时,是入参格式化为符合期待值,还是直接报错呢?我想这是每个JS工程师必定面对过问题。...而clj/cljs函数中condition map就是我们在开发阶段提供函数入参、函数返回值合法性断言能力,让我们尽早发现问题。

    57490

    使用 ClojureScript 开发浏览器插件过程与收获

    ,figwheel 相比 lein-cljsbuild 提供了热加载功能,这一点于开发 UI 很重要!...采用这种方式会报如下错误 根据错误提示,可以看出是 base.js 再去动态引用其他 js 文件时,是以访问网站相对路径开始,因此也就找不到正确 JS 文件了。...解决方法设置 cljsbuild optimizations :whitespace,把所有文件打包到一个文件,然后引用这一个就可以了,这个方法不是很完美,采用 whitespace 一方面使编译时间更长...在 dev 过程中,推荐设置 cljsbuild optimizations none,以便得到最快编译速度; 在 release 过程中,可以将其设置 advanced,来压缩、优化 js...re-agent re-agent 是 React 一个封装,使之符合 cljs 开发习惯。

    78430

    (cljsrun-at (JSVM. :all) 细说函数)

    其中附加:private和defn-定义函数目的是一样,就是函数访问控制设置private(默认为public),但可惜cljs现在还不支持:private,所以还是要用名称来区分访问控制策略...clj/cljs我们提供Multimethods这一杀技——不但可以根据类型调用不同函数实现,还可以根据以下内容呢!...(ns cljs.user) ;; Symbole, `b会展开cljs.user/b (derive 'dummy/a `b) ;; Keyword, ::a会展开cljs.user/:a (derive...Condition Map  对于动态类型语言而言,当入参不符合函数定义所期待时,是入参格式化为符合期待值,还是直接报错呢?我想这是每个JS工程师必定面对过问题。...而clj/cljs函数中condition map就是我们在开发阶段提供函数入参、函数返回值合法性断言能力,让我们尽早发现问题。

    38610

    (cljsrun-at (JSVM. :browser) 简单类型可不简单啊~)

    cljs中内置标量类型比js丰富得多,一方面方便了操作,另一个方面增加了学习成本,因此从js转向cljs时可能会略感不适,下面我们一起来认识吧!...(ns cljs.user) ;; 自动扩展以当前命名空间前缀keywork ::keyword ;;=> :cljs.user/keyword 3.自动扩展 ;; 自动查找以aliased-ns...,标识产生副作用函数 x-,标识产生私有方法,如defn-和deftest- _,标识可忽略symbol 既然Symbol仅仅作为标识符来使用,为何不见JS、C#等会将标识符独立出来作为一种类型呢...;; 定义一个List实例,元素a和b两个Symbol实例 (def symbol-list (list 'a 'b))  大家有没有注意到'这个符号啊?...而面向对象中,没有函数只有方法,而方法构造前必须先构建其所依赖类型或类型实例。

    71070

    (cljsrun-at (JSVM. :browser) 命名空间就这么简单)

    好习惯从"头"开始 每个cljs文件首行非注释内容必定如下 (ns my-project.core) 而当前cljs文件路径${project_dir}/src/my_project/core.cljs...,很明显命名空间与源码文件路径是一一,对应规则是-对应_,.对应/咯~ 引入其他命名空间  要使用其他命名空间下成员,那么必须先将其引入到当前命名空间才可以。...(:require [cljs.core :all])) 所以我们可以直接调用reduce而不是cljs.core/reduce。  ...我们没可能只调用cljs.core成员吧,那到底如何引入其他命名空间呢?下面我们一一道来!...,然后在运行时解析列表,而JS作为脚本语言根本就没有所有编译期,因此需要将macro写在独立clj文件中,然后在cljs编译为js时展开。

    81950

    React从入门到放弃,一个关于网页速度故事

    千万别让我碰那些莫名 JS,jQuery 根本就不存在代码封装。哪个处理器在哪里绑定,用来做什么?很难说这是一个好基础库!...理念是,所有的 HTML 都在服务器端渲染。而客户端根据元素属性,更新部分 HTML。基本上类似 HTML+XHR。你不能任意妄为,但这是重点之一;有些限制是好,从而让你不会做一些疯狂事情。...当我纠结于 HTML 片段请求时,我明白了一件事:当我目录页选择技术路线图时,最后选择是“类似 intercooler 小东西”。 那为什么还不行动呢?...TwinSpark 是一个用于声明式 HTML 增强框架:你在元素上添加额外属性,TwinSpark 它们一些处理。...在最差情况下,我们返回 2.5MB 简化后(但没有 gzip 压缩过JS 和 700KB 目录 HTML(其中一半是 React 初始化数据)。

    1K20

    前端魔法堂——异常不仅仅是trycatch

    @prop {String} description - 和message差不多 @prop {number} number - 异常类型编号,巨硬每个异常设置了一个唯一编号  那么现在我要实例化一个...其实Error构造函数签名是这样 @constructor @param {String=} message - 设置message属性 @param {String=} fileName - 设置...fileName属性 @param {number=} lineNumber - 设置lineNUmber属性 现在我们看看具体有哪些内置异常类型吧!...Promise实例初始化状态是pending,而发生异常时则为rejected,而导致状态从pending转变为rejected操作有 调用Promise.reject类方法 在工厂方法调用reject...总结  异常和如何捕获异常仅仅是前端智能监控中一小撮知识点,敬请期待后续另一小撮知识点《前端魔法堂——调用栈,异常实例中宝藏》吧:D 参考 https://developer.mozilla.org

    1.5K70

    前端魔法堂——异常不仅仅是trycatch

    @prop {String} description - 和message差不多 @prop {number} number - 异常类型编号,巨硬每个异常设置了一个唯一编号  那么现在我要实例化一个...其实Error构造函数签名是这样 @constructor @param {String=} message - 设置message属性 @param {String=} fileName - 设置...fileName属性 @param {number=} lineNumber - 设置lineNUmber属性 现在我们看看具体有哪些内置异常类型吧!...Promise实例初始化状态是pending,而发生异常时则为rejected,而导致状态从pending转变为rejected操作有 调用Promise.reject类方法 在工厂方法调用reject...总结  异常和如何捕获异常仅仅是前端智能监控中一小撮知识点,敬请期待后续另一小撮知识点《前端魔法堂——调用栈,异常实例中宝藏》吧:D  尊重原创,转载请注明来自 ^_^肥仔John 参考 https

    1.1K30

    (cljsrun-at (JSVM. :all) Metadata就这样哦)

    cljs虽然作为动态类型语言,但提供Metadata让我们在必要时候可选择地补充类型提示,以便提高代码可读性和供编译器优化使用。...示例1:获取VarMetadata (def a 1) (meta #'a) ;;=> {:ns cljs.user, :name a, :file "", :end-column...(with-meta obj m)  值得注意是,with-meta会返回值才会附加上metadata,而入参obj不会附加上metadata。因此需要用绑定来保存结果,以便后续使用。...内置metadata :dynamic ;; Boolean, 指定Var动态绑定 :private ;; Boolean, 指定该Symbol访问控制为私有,默认为public :doc...;; String, 设置document string :test ;; Function,不带入参函数,单元测试函数 :tag ;; Class,指定Symbol所指向Var数据类型

    60380

    (cljsrun-at (JSVM. :all) Metadata就这样哦)

    cljs虽然作为动态类型语言,但提供Metadata让我们在必要时候可选择地补充类型提示,以便提高代码可读性和供编译器优化使用。...示例1:获取VarMetadata (def a 1) (meta #'a) ;;=> {:ns cljs.user, :name a, :file "", :end-column...(with-meta obj m)  值得注意是,with-meta会返回值才会附加上metadata,而入参obj不会附加上metadata。因此需要用绑定来保存结果,以便后续使用。...内置metadata :dynamic ;; Boolean, 指定Var动态绑定 :private ;; Boolean, 指定该Symbol访问控制为私有,默认为public :doc...;; String, 设置document string :test ;; Function,不带入参函数,单元测试函数 :tag ;; Class,指定Symbol所指向Var数据类型

    25620

    .NET混合开发解决方案10 WebView2控件调用网页JS方法

    控件导航事件   客户端程序(WinForm、WPF、Win32、WinUI)集成WebView控件加载Web完成后,还有两种常见需求 C#调用JS方法 执行通用方法设置网页特效。...调用网页中定义JS方法,执行计算等。 JS调用C#方法 本文讲解第一种需求实现方式。...生成字符串包括开头引号、末尾引号和转义斜杠: 如果从脚本调用 JSON.stringify ,则结果将作为 JSON 字符串进行双重编码, JSON 字符串。...例如: 执行 performance.memory 返回时由于所有属性都是继承,因此在结果中看不到任何属性。 ...如果改为特定属性值从 performance.memory 复制到自己新对象中返回,则会在结果中看到这些属性

    3.1K20
    领券