Javascript对象方法返回为undefined

时间:2014-03-20 02:05:01

标签: javascript function object

我已经在这段代码中苦苦挣扎了好几天。本质上,它是一个对象,它接受3个文本框的输入并将它们连接成一个字符串..或者它应该做什么。

Student.toString返回未定义或“未捕获的TypeError:对象[对象对象]的属性'学生'不是函数”,它应该是姓氏,名字和身份编号。谁能解释我在这方面做错了什么?

    <div id='textInside'>
    First Name:<input type='text' id='fName'><br>
    Last Name:<input type='text' id='lName'><br>
    Student Id: <input type='text' id='stuId'><br>
    <button onclick='readInputs()'>Update</button>

    <p id='stuInfo'></p>
</div>

<script type='text/javascript'>
    var fiName = document.getElementById('fName');
    var laName = document.getElementById('lName');
    var studeId = document.getElementById('stuId');
    var toP = document.getElementById('stuInfo');

    var Student = new Object;

    function Student() {
        this.firstName = fiName;
        this.lastName = laName;
        this.studentId = studeId;
        this.toString = function() {var result = toP.innerHTML = this.lastName + this.firstName + this.studentId};
            return result;
        this.readInputs = function() { };
    }



    function readInputs() {
        Student();
        Student.toString();
    }
</script>

5 个答案:

答案 0 :(得分:3)

这里有很多错误。

var Student = new Object;

function Student() {
    this.firstName = fiName;
    this.lastName = laName;
    this.studentId = studeId;
    this.toString = function() {var result = toP.innerHTML = this.lastName + this.firstName + this.studentId};
        return result;
    this.readInputs = function() { };
}

首先,请使用{},而不是new Object。接下来,这只会将Student设置为new Object并覆盖您的函数,因为该函数已挂起。我很确定你只是想在那里拥有一个功能。

接下来,return result;不在您的toString功能中,这是一个错误,而且不是您报告的那个。这实际上是你的代码吗?也使用原型。并且toString不应该有副作用,构造函数不应该读取全局变量。

function Student(firstName, lastName, studentId) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.studentId = studentId;
}

Student.prototype.readInputs = function() {};

Student.prototype.toString = function() {
    return this.lastName + this.firstName + this.studentId;
};

现在readInputs看起来像这样(顺便说一下,它与Student上的空函数有关吗?):

function readInputs() {
    var s = new Student(fiName.value, laName.value, studeId.value);
    toP.innerHTML = s.toString();
}

请注意,您必须使用new和构造函数来正确创建this,并获取输入元素的value属性,并实际使用函数的返回值执行某些操作。

此错误:

  

Uncaught TypeError:Property&#39; Student&#39;对象[object Object]不是函数

对我来说似乎不可能,但我可能会错过一些东西。 (你在使用IE8吗?)

答案 1 :(得分:0)

尝试更改此

 var student = new Student(fiName,laName,studeId);
 var res = student.toString();

 function Student(fiName,laName,studeId) {
        this.firstName = fiName;
        this.lastName = laName;
        this.studentId = studeId;
    }

   Student.prototype.toString = function() {
        return this.lastName + this.firstName + this.studentId
    }

上面是面向对象的java脚本代码的示例。我定义了一个Student构造函数,并在新的Student类型上定义了一个toString方法。 建议将您的方法添加到原型链中,以便将它们绑定到类型而不仅仅是特定实例。

答案 2 :(得分:0)

<div id='textInside'>
First Name:<input type='text' id='fName'><br>
Last Name:<input type='text' id='lName'><br>
Student Id: <input type='text' id='stuId'><br>
<button onclick='readInputs()'>Update</button>

<p id='stuInfo'></p>
</div>

<script type='text/javascript'>
    var fiName = document.getElementById('fName');
    var laName = document.getElementById('lName');
    var studeId = document.getElementById('stuId');
    // Where is <node id="stuInfo" /> defined?..
    var toP = document.getElementById('stuInfo');

    function Student() {
        this.firstName = fiName.value;
        this.lastName = laName.value;
        this.studentId = studeId.value;
        this.toString = function() {
            var result = toP.innerHTML + this.lastName 
                + this.firstName + this.studentId
            return result;
            };
    }

    function readInputs() {
        var a_student = new Student();
        alert(a_student.toString());
    }
</script>

答案 3 :(得分:0)

获得元素id后,应该输入.value。因为你可以得到一个元素的id而不是它的值。

var fiName = document.getElementById('fName').value;

这样可以让你的变量有一个值。

答案 4 :(得分:-3)

要实例化对象,您必须使用单词new

由于您生成学生,您必须将构造函数

作为参数

代码应如下所示

<div id='textInside'>
    First Name:<input type='text' id='fName'><br>
    Last Name:<input type='text' id='lName'><br>
    Student Id: <input type='text' id='stuId'><br>
    <button onclick='readInputs()'>Update</button>

    <p id='stuInfo'></p>
</div>

<script type='text/javascript'>
var Student = function( option ) {
    this.firstName = option.fiName;
    this.lastName = option.laName;
    this.studentId = option.studeId;
    this.top = option.top;
};

Student.prototype.toString = function(){
     return document.write(this.lastName +" "+ this.fastName +" "+ this.studentId);
};

function readInputs() {
    var student = new Student({
         fiName: document.getElementById('fName').value.trim(),
         laName: document.getElementById('lName').value.trim(),
         studeId: document.getElementById('stuId').value.trim(),
         top: document.getElementById('stuInfo').value.trim()
    });
    student.toString();
}
</script>