javascript - 在 Javascript 中构造对象后立即调用对象方法

标签 javascript dom

我正在编写一个类,该类的属性中有一个动态加载的 DOM 元素。此流程的一个非常简单的概述:

  1. 窗口已加载
  2. 创建 SomeClass 类的对象(使用 (2.1) 一些属性,以及 (2.2) 使用 AJAX 动态加载的 DOM 元素)
  3. 可以选择对这些 DOM 元素属性执行某些操作(转换等)

像这样:

window.addEventListener("load",function(){ // Step 1
  someObject = new someClass("element_id") // Step 2.1
  someObject.loadToDOMThroughAJAX(function(){ // Step 2.2
      someObject.optionalMethodAfterConstruction(); // Step 3
  }); 
})

编辑:optionalMethodAfterConstruction() 的代码片段:

someClass.prototype.optionalMethodAfterConstruction = function(){
  var element = this.element.querySelector(".someClass")
  element.setAttribute("transform","translate(20,20)")
}

Edit2:loadDOMThroughAjax() 的片段:

someClass.prototype.loadDOMThroughAjax= function(){
  obj = this;
  var ajax = new XMLHttpRequest();
  ajax.open("GET", "/path/to/html", true);
  ajax.send();
  ajax.onload = function(e) {
    obj.element.innerHTML = ajax.responseText
  }
}

但是,当执行步骤 3 时,步骤 2.2 中的 DOM 元素尚未加载,这会导致步骤 3 失败,因为它依赖于成功的 document.querySelector() 调用。具有类 .someClass 的 DOM 元素是动态加载的,并且应该在调用该方法时出现,但事实并非如此。手动调用该方法确实有效。

我觉得我已经很接近了,但我想知道如何正确地做到这一点以及我缺少什么。

我无法将其附加到构造函数本身,因为它不应该应用于每个对象,而只能应用于一些对象。

没有 jQuery。

最佳答案

从您的第二次编辑中,我发现您实际上并未调用在步骤 2.2 中作为参数发送的函数。

someObject.loadToDOMThroughAJAX(function(){ // Step 2.2
  someObject.optionalMethodAfterConstruction(); // Step 3
}); 

但是你的函数如下:

someClass.prototype.loadDOMThroughAjax= function(){
  obj = this;
  var ajax = new XMLHttpRequest();
  ajax.open("GET", "/path/to/html", true);
  ajax.send();
  ajax.onload = function(e) {
    obj.element.innerHTML = ajax.responseText
  }
}

您还应该调用该参数作为 onload 函数的一部分:

someClass.prototype.loadDOMThroughAjax= function(CALLBACK){
  obj = this;
  var ajax = new XMLHttpRequest();
  ajax.open("GET", "/path/to/html", true);
  ajax.send();
  ajax.onload = function(e) {
    obj.element.innerHTML = ajax.responseText
    if (someConditionIsTrue) {
      CALLBACK();
    }
  }
}

关于javascript - 在 Javascript 中构造对象后立即调用对象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43204010/

相关文章:

javascript - 从窗口滚动事件中调用窗口大小调整事件中的函数?

javascript - Google Charts API - 绘图时给定轴上的所有系列必须具有相同的数据类型

javascript - 如何更改原点位置以在 HTML5 Canvas 中旋转绘制的线条

JavaScript - 使用克隆节点和 Json 数据克隆模板

linux - 使用 WebKit 或其他工具在控制台 linux 应用程序中获取 DOM

javascript - 找出两个 dom 元素的差异,然后使它们相同

javascript - UL 内的 ng-repeat(位于 P 内)不起作用

javascript - 通过 HTML 或 Javascript 读取服务器上的目录(无 AJAX)

javascript - 如何检查事件 clientx, clienty 是否存在于 getBoundingClientRect 中?

javascript - 使用 javascript 和 AJAX 将 html 文件插入到我的主 html 文件中的 DIV id