我有问题调用功能" Izpis"从一个数组。以下课程:
function Kandidat(ime, priimek, stranka, stDelegatov) {
if (ime == "" || priimek == "") {
alert("Podatki niso popolni!");
return;
} else {
this.ime = ime;
this.priimek = priimek;
this.stranka = stranka;
this.id = polje.length + 1;
this.stDelegatov = stDelegatov;
}
Izpis = function() {
return "(" + this.id + ")" + this.ime + " " + this.priimek + " pripada stranki " + this.stranka + ".";
}
PosodobiIzpis = function(ime, priimek, stranka, stDelegatov) {
this.ime = ime;
this.priimek = priimek;
this.stranka = stranka;
this.stDelegatov = stDelegatov;
}
}
我试过这样:
var a = [];
a = a.concat(Isci($("#iskalniNiz")));
for (var i = 0; i < a.length; i++) {
var temp = (Kandidat)(a[i]).Izpis();
$("br:eq(0)").after(temp + "\n");
}
没有(Kandidat)没有成功。我得到了&#34;未定义&#34;或&#34;不是一个功能&#34;错误。
答案 0 :(得分:0)
在我看来,Kandidat
似乎是一个构造函数。您定义Izpis
的方式有点粗略......
如果您想Izpis
要创建的实例的属性(使用new
关键字),则需要编写this.Izpis
。
如果您不在this.
前面,也不在var
前面,它会执行以下两项操作之一:
Izpis
,它将覆盖此变量。Izpis
变量,它将在构造函数内部创建一个新变量,该变量将无法在此代码块之外访问。我在您的代码中看到的另一个问题(可能最初未显示)是 在this
和Izpis
函数中使用PosodobiIzpis
。< / p>
一旦你调用kandidatInstance.Izpis()
以外的函数,这将会中断。例如:setTimeout(kandidatInstance.Izpis)
将不起作用。
要解决此问题,请执行以下任一操作:
function YourConstructor(id) {
// Method 1: store 'this' context in closure
var self = this;
this.yourMethod = function() {
return self.id;
};
// Method 2: explicitly bind 'this' context
this.yourMethod2 = function() {
return this.id;
}.bind(this);
};
// Method 3: use prototype
YourConstructor.prototype.yourMethod3 = function() {
return this.id;
};