Search code examples
javascriptprototypedomcontentloaded

javascript object prototype call


b2 and b3 are not triggering the prototype functions and no errors are generated? How does one accomplish calling prototype functions in the fashion?

<html>
<head>

<script type="text/javascript">
	function newObj(){
		this.obj_val= 7;
	}
	var trigger_f0 = function(){
		alert("here 0");										// trigger FINE! (ok)
	}
	newObj.prototype.trigger_f2 = function (){ // no triggering off click event
		alert("here 2");
	}
	newObj.prototype.trigger_f3 = function (){  // not triggering off click event
		alert("obj value:" + newObj.obj_val);
	}

	var init = function(){
		b3.addEventListener('click', newObj.trigger_f3, false);
		b2.addEventListener('click', newObj.trigger_f2, false);
		b1.addEventListener('click', trigger_f0, false);
	}

	window.addEventListener('DOMContentLoaded', init, false);
	</script>
	
	</head>
<body>
<button id="b1">B1</button>
<button id="b2">B2</button>
<button id="b3">B3</button>

</body>

</html>


Solution

  • You need to create an instance like to get an object out of the constructor function

    var a=new newObj()
    

    and then access the properties. and change newObj.obj_val to

    new newObj().obj_val
    

    function newObj() {
      this.obj_val = 7;
    }
    var trigger_f0 = function() {
      alert("here 0"); // trigger FINE! (ok)
    }
    newObj.prototype.trigger_f2 = function() { // no triggering off click event
      alert("here 2");
    }
    newObj.prototype.trigger_f3 = function() { // not triggering off click event
      alert("obj value:" + new newObj().obj_val);
    }
    var a = new newObj();
    
    b3.addEventListener('click', a.trigger_f3, false);
    b2.addEventListener('click', a.trigger_f2, false);
    b1.addEventListener('click', trigger_f0, false);
    <body>
      <button id="b1">B1</button>
      <button id="b2">B2</button>
      <button id="b3">B3</button>
    
    </body>