为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript 使用来自字符串的动态参数实例化新对象

JavaScript 使用来自字符串的动态参数实例化新对象

慕容3067478 2021-08-20 10:29:58
我想用来自外部字符串的动态参数实例化一个新对象。这是代码:const editorInstance = new Editor('#edit',  {    placeholderText: null,    theme: 'dark',    language: 'en',    linkList:[{text: 'test',href: 'test',target: '_blank'}],    events: {      initialized: function () {        const editor = this        this.el.closest('form').addEventListener('submit', function (e) {          jQuery('#gs_editor_content').hide();          jQuery(this).append('<div class="loadingDiv">&nbsp;</div>');          o.script        });        texta = jQuery('#myeditor').find('textarea');        targetFile = texta.attr('rel');        content = editor.$oel.val();        e.preventDefault();        var fd = new FormData();         fd.append( 'name' ,targetFile);        fd.append( 'html', editor.$oel.val() );        $.ajax({          url : 'http://localhost/Update',          type : 'POST',          data: fd,          processData : false,          contentType : false,          async : false,          success : function(data, textStatus, request) {}        });        jQuery('#myeditor').dialog("close");      }    }  })linkList当我收到从我的服务器收到的新列表时,我需要在实例化我的对象之前修改参数。我尝试使用 eval 或 parseFunction,但遇到意外的标识符错误。知道我怎么能做到这一点吗?
查看完整描述

3 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

我想用来自外部字符串的动态参数实例化一个新对象。


这是代码:


const editorInstance = new Editor('#edit',

  {

    placeholderText: null,

    theme: 'dark',

    language: 'en',

    linkList:[{text: 'test',href: 'test',target: '_blank'}],

    events: {

      initialized: function () {

        const editor = this


        this.el.closest('form').addEventListener('submit', function (e) {

          jQuery('#gs_editor_content').hide();

          jQuery(this).append('<div class="loadingDiv">&nbsp;</div>');

          o.script

        });


        texta = jQuery('#myeditor').find('textarea');

        targetFile = texta.attr('rel');

        content = editor.$oel.val();


        e.preventDefault();


        var fd = new FormData(); 

        fd.append( 'name' ,targetFile);

        fd.append( 'html', editor.$oel.val() );

        $.ajax({

          url : 'http://localhost/Update',

          type : 'POST',

          data: fd,

          processData : false,

          contentType : false,

          async : false,

          success : function(data, textStatus, request) {}

        });


        jQuery('#myeditor').dialog("close");


      }

    }

  }

)

linkList当我收到从我的服务器收到的新列表时,我需要在实例化我的对象之前修改参数。


我尝试使用 eval 或 parseFunction,但遇到意外的标识符错误。


知道我怎么能做到这一点吗?


查看完整回答
反对 回复 2021-08-20
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

如果我理解您的问题是正确的,您是否在将链接列表包含到新对象之前尝试更新它?


如果是这种情况,您可以使用基于承诺的东西作为 fetch 来获取您的数据:Using Fetch by MDN documentation。您已经在使用 JS 类,所以我确定您已经了解浏览器兼容性或使用 Babel(如果浏览器兼容性对您很重要)。


如果您更喜欢使用 jQuery AJAX 来获取数据,您可以使用 async await 在您的软件实例化对象之前更新 linkList。Async Await 的 MDN 文档。


在这种情况下,您可以执行以下操作:


async function getData(paramIfNeeded) {

  var linkListData = await linkListFunction(paramIfNeeded2);

  return linkListData

}


function linkListFunction(paramIfNeeded2){

  //Your favourite data fetching function

}


getData().then((result) =>{

  var linkList = result;

  //instanciate the object

});

如果您更喜欢 ES 2015,可以这样做:


function callData(){

  getData(paramIfNeeded)

  .then(result => {

    linkListFunction(paramIfNeeded2)

    .then( result => {

      //do things with linkList

    });

  });

}


查看完整回答
反对 回复 2021-08-20
?
MYYA

TA贡献1868条经验 获得超4个赞

问题可能是由异步引起的。您的班级正在从您的服务器收到响应之前初始化。您需要在收到响应后初始化类。


例如


const editorInstance = new Editor("#edit", {

    placeholderText: null,

    theme: "dark",

    language: "en",

    linkList: serverExample() // undefined

});


function serverExample() {

    setTimeout(() => {

        return [

            { text: "test", href: "test", target: "_blank" },

            { text: "test2", href: "test", target: "_blank" }

        ];

    }, 3000);

}


查看完整回答
反对 回复 2021-08-20
  • 3 回答
  • 0 关注
  • 310 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信