【问题标题】:Is it possible to run object method using Object's ID?是否可以使用对象的 ID 运行对象方法?
【发布时间】:2018-01-08 09:07:26
【问题描述】:

对象构造器创建的方法:

 function objectexample(name) {
        this.name = name;

    this.create = function(){
    var obj = document.createElement('div');
    obj.id = this.name;
    parent = document.getElementsByTagName("body")[0];
    parent.appendChild(obj);
    }

     this.showalert = function(){
     alert("alert"); 
    }

    }

现在我创建对象:

var obj1 = new objectexample("new1");

如何为这个对象运行方法.create,但不使用变量obj1,我想用ID获取Object,例如:

 document.getElementById("new1").showalert();

有可能吗?

【问题讨论】:

  • 不,getElementById("new1") 不可能给你一个不同的对象,它是 dom 对象而不是 objectexample 对象
  • 但你可以做相反的事情:创建一个 JS 对象,在 var 中保存对 DOM 对象的引用

标签: javascript object methods


【解决方案1】:

您所说的是变量名,而不是对象 ID。

document.getElementById 与 Javascript 变量名称无关,而是用于通过其 id 从 HTML 文档中选择元素。但是,可以根据您的用例以几种不同的方式执行此操作。

一种方法是使用一个全局/整洁范围的对象,您可以在每次调用构造函数时对其进行修改。

let objects = {}; // create your global object

function objectexample(name) {
    this.name = name;
    // append this to global object
    objects[name] = this;
    
    this.create = function(){
      var obj = document.createElement('div');
      obj.id = this.name;
      parent = document.getElementsByTagName("body")[0];
      parent.appendChild(obj);
    }

    this.showalert = function(){
      alert("alert"); 
    }

}

new objectexample("new1");

console.log(objects.new1)
console.log(objects["new1"]) // alternatively method

【讨论】:

    【解决方案2】:

    基本上是的,有可能

    但是,您需要该元素包含对创建它的对象的引用。

    在下面的演示中:

    • 在构造newobj1时,我们定义了3个属性:
      1. 它的name
      2. create() 方法在调用时会创建一个元素。
      3. showAlert() 方法,调用时会输出一些数据。
    • 在调用 create() 之前调用 showAlert() 时,我们会获得有关该对象的所有可用数据,但没有关于尚未创建的元素的任何数据。
    • 在调用create() 时,我们创建元素,并将creation 定义为对象的属性,并将元素作为其值。
    • 然后我们将creator 定义为元素的属性,其值为this(创建该元素的对象)。
    • 现在对象 (creator) 有一个名为 creation 的子元素,并且该元素有一个 creator 及其所有属性,包括它的方法。

    换句话说,如果new 对象生成了一个元素,则该元素采用其创建者的属性,并且创建者紧紧握住其孩子的手。

    function ObjectExample( name ) {
      this.name = name;
    
      this.create = function() {
        this.creation = document.createElement( "div" );
        this.creation.id = name;
        this.creation.creator = this;
        document.body.appendChild( this.creation );
      }
    
      this.showAlert = function() {
        // alert( "Alert!" ); // simpler for demo to use console
        console.log( this.name );
        console.log( this.creation );
        return this.creation;
      }
    }
    
    let obj1 = new ObjectExample( "new1" );
    
    if ( !obj1.showAlert() ) {
      obj1.create();
    }
    
    document.getElementById( "new1" ).creator.showAlert();

    【讨论】:

    • 谢谢,但它并没有完全按照我的意愿工作。是的,它运行该方法,但在方法内部我无法获取对象属性,例如:this.name 将返回 null
    • @Tomson_PL - 我之前没有看到要求;我已经包含了该功能。为了方便起见,我在演示中选择了console.log
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多