2017-08-01 3 views
2

オブジェクト:オブジェクト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"); 
    } 

    } 

そして今、私は、オブジェクトを作成します。

このオブジェクトのメソッド.createを実行する方法
var obj1 = new objectexample("new1"); 

ではなく、変数OBJ1を使用して、私が取得したいですIDを使用するオブジェクト:

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

可能ですか?

+0

んが、それは、UAにobjectexampleオブジェクト – gusaindpk

+0

DOMオブジェクトではない別のオブジェクトを与えるだろうが、あなたは反対を行うことができます可能getElementByIdを(「NEW1」)ではないではありません:節約JSオブジェクトを作成します内部DOMオブジェクトへの参照 – Kaddath

答えて

0

あなたが話しているのは、オブジェクトIDではなく変数名です。

document.getElementByIdはJavascriptの変数名とは関係ありませんが、HTMLドキュメントの要素をIDで選択するために使用されます。ただし、ユースケースに応じていくつかの異なる方法でこれを行うことができます。

グローバル/きちんとスコープされたオブジェクトを使用すると、コンストラクタが呼び出されるたびに変更することができます。

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

基本的には、はい、しかし、あなたはそれを作成したオブジェクトへの参照を格納する要素が必要になります

可能です。以下のデモで

は:
  1. そのname

    • newobj1を構築し、我々は3つのプロパティを定義します。
    • create()メソッドを呼び出すと、要素が作成されます。
    • showAlert()呼び出されたときに何らかのデータを出力する方法。
  • showAlert()を呼び出す前にcreate()を呼び出すと、オブジェクトについて利用可能なデータはすべて取得されますが、まだ作成されていない要素は何も取得されません。
  • create()を呼び出すと、要素が作成され、要素の値としてcreationがオブジェクトのプロパティとして定義されます。
  • 次に、を要素のプロパティとして定義し、値は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'を選択しました。 –

    関連する問題