【问题标题】:How to set a property of a function which is defined as a property, during declaration如何在声明期间设置定义为属性的函数的属性
【发布时间】:2017-12-29 21:01:30
【问题描述】:

here 中的 JSFiddle,这是一个 JavaScript 和/或 CodeMirror 问题。

在下面的 sn-p 中,hint 函数被定义为 hintOptions 对象中的一个属性。

是否可以设置该函数的属性,而不在代码块之外定义它?

var editor = CodeMirror.fromTextArea(myTextarea, {
    hintOptions: {
        hint: function(cm, callback, options) {
            return {
            }
        }
    }
});

我尝试了匿名函数,如:

var editor = CodeMirror.fromTextArea(myTextarea, {
    hintOptions: {
        hint: (function(cm, callback, options) {
            return {
            }
        })({
            async: true
        })
    }
});

但这似乎是一个语法错误,因为 JavaScript 根本不起作用。

作为 CodeMirror docs 提及:

提示:函数

一个提示函数,如上所述。可以将提示函数上的 async 属性设置为 true,在这种情况下,它将使用参数(cm、回调、?options)调用它

检查async是否设置正确:

  1. 打开JSFiddle
  2. 点击“类代码”
  3. 键入 Ctrl+空格
  4. log textarea 不应该有undefined

【问题讨论】:

  • 不太清楚你的目标是什么,或者你想解决什么更高层次的问题
  • 我不知道在这种情况下是否可以使用 JavaScript 配置该属性(因此代码很紧凑),或者我必须将函数从声明中删除为属性。或者换句话说,如何最好地定义 async 属性。
  • 应该是hint: async function...
  • 它不起作用,请检查更新JSFiddle
  • @charlietfl:请查看this

标签: javascript codemirror


【解决方案1】:

对象初始化器中的 IIFE 用于创建具有 async 属性的函数似乎有效:

let testObj = {
    hintOptions: {
        hint:   (function () {
            let hint = function(cm, callback, options) {
                 log(options);
                 return {
                     from: cm.getDoc().getCursor(),
                     to: cm.getaDoc().getCursor(),
                     list: ['foo', 'bar']
                 }
             }
             hint.async = true;
             return hint
        })()
    }
};

console.log("hint.async: " + testObj.hintOptions.hint.async);  

按照发布说明,我设法在小提琴中获得“[object Object]”,但不知道这是预期的结果。

【讨论】:

  • 确实,你得到的不是undefined,那就是需要的,谢谢。
猜你喜欢
  • 2023-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
  • 2023-03-08
相关资源
最近更新 更多