程序运行时,Javascript代码显示未定义

时间:2016-06-08 11:30:56

标签: javascript arrays string prototype

我的程序必须使用字符串prototype属性,即使它是不必要的。每当单击提交按钮时,都会导致一堆未定义的。 在show_alphabet函数中,我有一个名为“str”的变量,一个大写字母的字母串。

在show_alphabet函数中,我有使用String对象的prototype属性添加名为“sendArray”的方法的代码,并为此(sendArray)分配一个返回split()方法的函数。 split()方法将拆分字母串。

我试图将“str”中的字母显示为一个数组,其中包含句点冒号,后跟每个字母,并将每个字母放在一个单独的行上。 例如: A: B: C: ...

虽然我意识到不必使用字符串prototype属性,但我的任务指南说必须使用它们。以下是我的代码的相关部分。

<form>
<button type = "button" onclick = show_alphabet()>submit</button>
</form>
<script type "text/javascript">
function show_alphabet() {
var str = new String("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
String.prototype.sendArray = function() {
    return this.split("");
}
var arr = str.sendArray 
for (i = 0; i<str.length- 1; i++) {
    str.split(":<br />");
    document.write(arr[i]);
    }
}

2 个答案:

答案 0 :(得分:0)

这:var arr = str.sendArray

应该是:var arr = str.sendArray()

否则您将函数分配给arr而不是函数结果。

示例:

&#13;
&#13;
var str = new String("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
String.prototype.sendArray = function() {
    return this.split("");
}
var arr = str.sendArray(); 
var arrLength = arr.length; // length of the array should be calculated before the loop, or it will be calculated on every interaction.
for (i = 0; i<arrLength; i++) {
    arr[i]+=":<br />"
    console.log(arr[i]);
}
&#13;
&#13;
&#13;

答案 1 :(得分:0)

更改代码部分

var arr = str.sendArray 

var arr = str.sendArray();

这样你实际上是在分配函数调用的返回值,而不是函数本身。