2015-09-13 75 views
-1
<div id="id1">Click to know</div> 

<script> 
function Superheroe(power){ 
    this.power=power; 
} 
//edited: copy mistake solved 
Superheroe.prototype.sayYourPower=function(){ 
    alert('This is my power :'+ this.power); 
} 

var Mike = new Superheroe ("Code fast"); 


document.getElementById('id1').addEventListener("click",Mike.sayYourPower); 
</script> 

我很想知道爲什麼當我要求sayYourPower時我得到'undefined'...這是爲了在方法結束時不包括「()」?javascript測試中的簡單原型

+1

您將函數添加到'Person'原型,但是從'Superheroe'創建對象。並且即使你將'Person'改爲'Superheroe'也不行,因爲在你的情況下'this this'裏面的事件處理器並不是指對象'超級英雄' – Grundy

+0

我犯了一個錯誤對不起! –

回答

0

您的超級英雄對象尚未擴展Person原型,因此Mike沒有函數sayYourPower

0

這是應該的

<div id="id1">Click to know</div> 

<script> 
    function Superheroe(power){ 
    this.power = power; 
    } 

    Superheroe.prototype.sayYourPower=function(){ 
    alert('This is my power :'+ this.power); 
    } 

    var Mike = new Superheroe("Code fast"); 
    document.getElementById('id1').addEventListener("click",Mike.sayYourPower.bind(Mike)); 
</script> 
+0

您在添加處理程序之前調用'sayYourPower',因此onclick會附加結果此函數 - _undefined_ – Grundy

+0

您是否測試了這個?另外,你認爲OP在「人」課上試圖做什麼?你的答案如何解決? –

0

您應該使用Superheroe代替Person,並且還使用bind功能,或匿名函數作爲處理程序,對於savinf方面

function Superheroe(power){ 
 
    this.power=power; 
 
} 
 

 
Superheroe.prototype.sayYourPower=function(){ 
 
    alert('This is my power :'+ this.power); 
 
} 
 

 
var Mike = new Superheroe ("Code fast"); 
 

 

 
document.getElementById('id1').addEventListener("click",Mike.sayYourPower.bind(Mike)); 
 
//another variant with anonymous function 
 
//document.getElementById('id1').addEventListener("click",function(){Mike.sayYourPower()});
<div id="id1">Click to know</div>