2016-11-06 10 views
1

私は実際には単純な(それはかなり確信している)例にこだわっている。私は第二の要素をクリックしたが、それはケースではないときに私は最初の要素と「第二」をクリックしたとき、私は「最初」を取得する必要があり、イベントを作成するときに、オブジェクト全体を結合することによってイベントの作成時にjavascriptのバインドオブジェクト

<div id="first">first</div> 
<div id="second">second</div> 
<script> 
    var JSClass = { 
     element : null, 
     click : function() { 
      console.log(this.element.id); 
     }, 
     created : function(element) { 
      this.element = element; 
      this.element.addEventListener('click', this.click.bind(this)); 
     } 
    }; 
    JSClass.created(document.querySelector('#first')); 
    JSClass.created(document.querySelector('#second')); 
</script> 

。 あなたのオブジェクトがクラスのように動作する場合、あなたはこのような関数クロージャの使用をすることができますそれは私が使用する他のオブジェクトのための完全に機能するのですが、この単純なケースでは動作しません...

+1

オブジェクトが1つだけ含まれています。 '.created()'を2度目に呼び出すと、初めて呼び出されたときに設定された「要素」プロパティの値が上書きされます。 – Pointy

+0

'JSClass'をオブジェクトを返す関数に変更します。 –

答えて

0

を作るためにObject.createを使用してみてくださいは、

<div id="first">first</div> 
 
<div id="second">second</div> 
 
<script> 
 
    class JSClass { 
 
    constructor(element) { 
 
     this.element = element; 
 
    } 
 
    created() { 
 
     this.element 
 
     .addEventListener('click', this.click.bind(this)); 
 
    } 
 
    click() { 
 
     console.log(this.element.id); 
 
    } 
 
    }; 
 
    let first = new JSClass(document.querySelector('#first')); 
 
    let second = new JSClass(document.querySelector('#second')); 
 
    first.created(); 
 
    second.created(); 
 
</script>

をコンストラクタに渡さ elementthis.elementを設定しました
+0

ありがとう、私はこれを行うための最も現代的な方法だと思います。 – Aarto

1

var JSClass = function(element) { 
 
    this.element = element; 
 
    element.addEventListener('click', click.bind(this)); 
 
    
 
    function click() { 
 
    console.log(this.element.id); 
 
    } 
 
}; 
 

 
new JSClass(document.querySelector('#first')); 
 
new JSClass(document.querySelector('#second'));
<div id="first">first</div> 
 
<div id="second">second</div>

+0

ありがとうございます!記述されているコードもうまくいきます:) – Aarto

1

あなたはクラスを作成しておらず、オブジェクトを作成しています。

したがって、そのオブジェクトで.createdを呼び出すたびに、その中の要素を上書きしています。

あなたはclassを使用できる2つの異なるオブジェクト

var JSClass = { 
    element : null, 
    click : function() { 
     console.log(this.element.id); 
    }, 
    created : function(element) { 
     this.element = element; 
     this.element.addEventListener('click', this.click.bind(this)); 
    } 
}; 

var first = Object.create(JSClass); 
var second = Object.create(JSClass); 

first.created(document.querySelector('#first')); 
second.created(document.querySelector('#second')); 

fiddle

+0

「クラス」と「オブジェクト」についてはあなたが正しいです。私の側からは間違いです。私の説明に沿って、私はオブジェクトだけを話し、オブジェクトの名前はJSClassです) – Aarto

関連する問題