2017-01-31 102 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()) –

相关问题