2017-01-31 105 views
1

目標: 我試圖從輸入值傳遞給它返回一個對象傳遞值來返回一個對象的構造函數

問題構造函數: 我所得到的回報是「undefined」 我認爲這可能與我按鈕上的onclick有關,也許我沒有把它調用正確。我真的不確定。我看遍了互聯網,找不到答案。

的JavaScript

var name = document.getElementById('inputValueName').value; 
var age = document.getElementById('inputValueAge').value; 
var state = document.getElementById('inputValueState').value; 

function person(name, age, state) { 
    this.name = name; 
    this.age = age; 
    this.state = state; 
} 
var NewPerson = new person(name, age, state); 

console.log(NewPerson); 

HTML

<input type="text" id="inputValueName"> 
<input type="text" id="inputValueAge"> 
<input type="text" id="inputValueState"> 
<button id="btn" onclick="person();">Add</button> 

回答

4

你得到內peronundefinednameagestate因爲你沒有經過任何person當您點擊按鈕:

<button id="btn" onclick="person();">Add</button> 
<!-- Where are the arguments? ---^   --> 

(當撥打電話person時,由於您沒有使用newperson沒有return x聲明,因此您還將返回undefined作爲呼叫的結果。但我認爲你的意思是參數,因爲你沒有看到返回值。)

你的JavaScript代碼顯示你在別處調用它是正確的(除了在JavaScript名稱中使用大寫字母的標準做法):

var NewPerson = new person(name, age, state); 

如果你包裹起來所有的JavaScript代碼(獲取值,調用new person等)到一個新的功能,說createPerson,並呼籲說,相反,它在很大程度上工作:

function createPerson() { 
 
    var name = document.getElementById('inputValueName').value; 
 
    var age = document.getElementById('inputValueAge').value; 
 
    var state = document.getElementById('inputValueState').value; 
 

 
    function person(name, age, state) { 
 
    this.name = name; 
 
    this.age = age; 
 
    this.age = age; 
 
    this.state = state; 
 
    } 
 
    var NewPerson = new person(name, age, state); 
 

 
    console.log(NewPerson); 
 
}
<input type="text" id="inputValueName"> 
 
<input type="text" id="inputValueAge"> 
 
<input type="text" id="inputValueState"> 
 
<button id="btn" onclick="createPerson();">Add</button>


你顯然可以自由地做你喜歡在自己的代碼,卻又無比,在JavaScript中的慣例是構造功能(您通過new調用的)開始大寫字母,基本上沒有其他變量。因此,對於引用新人的變量,將是構造函數Person(而不是person),以及newPerson(而不是NewPerson)。


旁註:onxyz -attribute式的事件處理程序時很方便,快速和骯髒的樣機,但他們有幾個問題,並非最不重要的,他們調用的函數必須是全局變量,與全局是壞事情™。確保您熟悉現代事件處理,以用於實際應用程序,addEventListener等。

+1

+1,但是我覺得你的第一句話是錯誤的,因爲他沒有明確之前'person' – smarber

+0

@了'new'關鍵字smarber:取決於他/她得到'undefined'。我認爲他/她在函數內的意思是作爲參數'name'等的值,因爲他/她沒有使用返回值,所以不會看到'沒有定義'調用沒有'new'的'person' '會導致,我可以澄清它。 –

+0

@ T.J.Crowder您能否給我一些關於事件處理的現代用法的很好的閱讀?感謝您的反饋,我會採取您的建議心臟 –

0

您沒有在您的點擊處理程序中將任何參數傳遞給person()

嘗試以下操作:

function person(name, age, state) { 
    this.name = name; 
    this.age = age; 
    this.state = state; 
} 

function createPerson() { 
    var name = document.getElementById('inputValueName').value; 
    var age = document.getElementById('inputValueAge').value; 
    var state = document.getElementById('inputValueState').value; 

    var NewPerson = new person(name, age, state); 
    return NewPerson; 
} 

HTML

<button id="btn" onclick="createPerson();">Add</button> 
+0

返回onclick?那該怎麼辦?可能console.log(createPerson()) –

相關問題