如何在声明期间设置定义为属性的函数的属性

问题描述 投票:0回答:1

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

在下面的代码片段中,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,callback,?options)

要检查async是否设置正确:

  1. 打开JSFiddle
  2. 点击“课程代码”
  3. 键入Ctrl + Space
  4. log textarea应该没有undefined
javascript codemirror
1个回答
1
投票

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

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]”,但不知道这是预期的结果。

© www.soinside.com 2019 - 2024. All rights reserved.