是否可以使用Object的ID运行对象方法?

时间:2017-08-01 13:10:11

标签: javascript object methods

使用Object Constructor创建的方法的对象:

 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();

有可能吗?

2 个答案:

答案 0 :(得分:1)

基本上,是的,有可能

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

在下面的演示中:

  • 构建new obj1时,我们定义了3个属性:
    1. name
    2. 调用时create()方法创建元素。
    3. 一种showAlert()方法,在调用时输出一些数据。
  • 在调用showAlert()之前调用create()时,我们会获得有关该对象的任何可用数据,但没有关于尚未创建的元素的信息。
  • 调用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();

答案 1 :(得分:0)

您所谈论的是变量名称,而不是对象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