从数组中的对象继承/调用函数
Inheritance / Calling function from object in array
你好
我对Javascript相当陌生。我在Java方面做得更好,所以我对Javascript的许多事情感到困惑。我创建了类Clovek,它有一些变量和函数。后来我创建了数组Lide,其中有Clovek的MAX(100)对象。所以当我稍后调用函数vypis时,我只得到TypeError。。废话不是函数。但当我写**console.trace(lide[1])**时,它写的是Clovek的一个实例。我很困惑。。
此处编码:
function makeid() {
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for( var i=0; i < 8; i++ )
text += possible.charAt(Math.floor(Math.random() * possible.length));
return text;
}
var odstavec = document.getElementById("test");
function Clovek(vek, pohlavi, jmeno) {
this.vek = vek;
this.pohlavi = pohlavi;
this.jmeno = jmeno;
}
Clovek.prototype.vypis = function() {
//console.log(this.vek+" "+this.pohlavi+" "+this.jmeno);
//odstavec.innerHTML = this.vek+" "+this.pohlavi+" "+this.jmeno;
return this.vek+" "+this.pohlavi+" "+this.jmeno;
};
var MAX = 100; // Maximální počet
var lide = [MAX];
for( var i = 0; i < MAX; i++) {
_tempclovek = new Clovek(i,"muz",makeid());
lide.push(_tempclovek);
console.log(_tempclovek.vypis());
};
var table = document.createElement("table");
var tbody = document.createElement("tbody");
for (var i = 0; i < MAX; i++) {
var row = document.createElement("tr");
var cell = document.createElement("td");
_tempclovek = lide[i];
console.trace(_tempclovek.vypis());
var cellText = document.createTextNode(_tempclovek);
cell.appendChild(cellText);
row.appendChild(cell);
tbody.appendChild(row);
};
var body = document.getElementsByTagName("body")[0];
table.appendChild(tbody);
body.appendChild(table);
table.setAttribute("border", "2");
EDIT-该代码位于HTML文档im <script>
标记中
您可以使用new Array(MAX)
创建一个长度为的数组。这将创建一个100
空值数组。如果您使用push,它将把它附加到数组中,所以请使用lide[i]
。
代码
function makeid() {
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (var i = 0; i < 8; i++)
text += possible.charAt(Math.floor(Math.random() * possible.length));
return text;
}
var odstavec = document.getElementById("test");
function Clovek(vek, pohlavi, jmeno) {
this.vek = vek;
this.pohlavi = pohlavi;
this.jmeno = jmeno;
}
Clovek.prototype.vypis = function () {
//console.log(this.vek+" "+this.pohlavi+" "+this.jmeno);
//odstavec.innerHTML = this.vek+" "+this.pohlavi+" "+this.jmeno;
return this.vek + " " + this.pohlavi + " " + this.jmeno;
};
var MAX = 100; // Maximální počet
var lide = new Array(MAX);
for (var i = 0; i < MAX; i++) {
var _tempclovek = new Clovek(i, "muz", makeid());
lide[i] = _tempclovek;
//console.log(_tempclovek.vypis());
};
var table = document.createElement("table");
var tbody = document.createElement("tbody");
for (var i = 0; i < MAX; i++) {
var row = document.createElement("tr");
var cell = document.createElement("td");
var _tempclovek = lide[i];
console.log("Type Of: " ,typeof(lide[i]))
console.log(lide)
console.trace(_tempclovek.vypis());
var cellText = document.createTextNode(_tempclovek.vypis());
cell.appendChild(cellText);
row.appendChild(cell);
tbody.appendChild(row);
};
var body = document.getElementsByTagName("body")[0];
table.appendChild(tbody);
body.appendChild(table);
table.setAttribute("border", "2");
从元素0开始在lide
上循环,元素0是整数100,而不是Clovek
的实例。
1。数组定义
使用var lide = [];
而不是var lide = [MAX];
。Javascript没有提供限制数组中元素数量的原生方法。[MAX]
只是给你一个数组,里面有一个元素:数字MAX
,在这种情况下是100。
2.变量范围
在for循环中,在定义变量_tempclovek
时使用关键字var
,以便它在局部作用域而不是全局作用域中使用_tempclovek
。如果在js中定义变量时不使用var
,它会创建一个全局变量,这可能会导致意外的结果。
3.对象为字符串
对createTextNode()
的调用应该是在Clovek
对象上调用vypis()
函数。否则,您将获得对象的默认字符串值,即js中的[object Object]
。
http://jsfiddle.net/pcbpa9p5/
- 如何从模块链中调用函数.导出到节点中
- 调用函数内部的函数
- 在javascript中调用c函数
- DropDownListFor赢得't在更改时调用函数
- Javascript页面调用函数
- 在动画结束之前调用函数
- 允许父窗口在其不同域的子iframe上调用函数
- 运行Infinite Scroll后调用函数时出现问题
- JavaScript:在调用函数的文本输入上按enter键
- 使用大括号和不使用bracs调用函数的区别
- javascript在事件上调用函数
- 从index.html调用函数,该函数无限循环
- 从带参数的字符串变量调用函数中的函数
- 为什么 JS 不在滚动时调用函数
- 是否可以在不更改上下文的情况下调用函数.apply
- 如何在ES6类中使用参数调用函数
- AngularJS:调用函数时编号不更新
- JavaScript中的立即调用函数表达式(IIFE)-传递jQuery
- 在JavaScript中调用函数时自定义此选项
- 调用函数中声明的变量