2017-08-01 68 views
2

对象与方法由Object构造函数创建:是否有可能使用Object的ID来运行对象方法?

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

如何为这个对象的run方法.create,但没有使用可变OBJ1,我想使用ID的对象,例如:

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

是否有可能?

+0

不,它是不可能的getElementById(“名new1”)会给UA不同的对象,它是DOM对象不是objectexample对象 – gusaindpk

+0

但你可以做相反:创建一个JS对象,节省在var对DOM对象的引用中 – Kaddath

回答

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

+0

谢谢,是的,它解决了我的问题 –

1

基本上,是的,这是可能的

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

在下面的演示:

  • 在构建newobj1,我们定义了3个属性:
    1. name
    2. A create()当被调用时创建一个元素的方法。
    3. A 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();

+0

谢谢,但它并没有完全按照我的意图工作。是的,它运行该方法,但内部方法我无法获得对象属性,例如:** this.name **将返回** null **。 –

+0

@Tomson_PL - 我以前没有看到要求;我已经包含了这个功能。为了方便起见,我在演示中选择了'console.log'。 –

相关问题