从数组中的对象调用函数(JS)

时间:2016-05-11 13:17:40

标签: javascript jquery dom

我有问题调用功能" 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;错误。

1 个答案:

答案 0 :(得分:0)

在我看来,Kandidat似乎是一个构造函数。您定义Izpis的方式有点粗略......

如果您想Izpis要创建的实例的属性(使用new关键字),则需要编写this.Izpis

如果您不在this.前面,也不在var前面,它会执行以下两项操作之一:

  1. 如果有全局定义的Izpis,它将覆盖此变量。
  2. 如果当前上下文中没有定义Izpis变量,它将在构造函数内部创建一个新变量,该变量将无法在此代码块之外访问。
  3. 我在您的代码中看到的另一个问题(可能最初未显示)是 thisIzpis函数中使用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;
    };