Извикване на функции от функция вътре в обект (литерал на обект)

Уча се да използвам обектни литерали в JS и се опитвам да накарам функция вътре в обект да се изпълнява, като я извикам чрез друга функция в същия обект. Защо функцията "run" не се изпълнява, когато се извиква от функцията "init"?

var runApp = {

    init: function(){   
         this.run()
    },

    run: function() { 
             alert("It's running!");
    }
};

person holyredbeard    schedule 21.11.2011    source източник


Отговори (3)


Този код е само декларация. Трябва действително да извикате функцията:

runApp.init();

Демо: http://jsfiddle.net/mattball/s6MJ5/

person Matt Ball    schedule 21.11.2011

Няма нищо магическо в свойството init на обект, на който случайно сте присвоили функция. Така че, ако не го извикате, тогава няма да работи. Никога не се изпълняват функции за вас, когато конструирате обектен литерал като този.

Като такъв, вашият код става следният:

var runApp = {
    init: function(){   
         this.run()
    },
    run: function() { 
         alert("It's running!");
    }
};

// Now we call init
runApp.init();
person Alex Wayne    schedule 21.11.2011
comment
Той не попита това. Той иска да извика функция вътре в обект, като я извика чрез друга функция в същия обект. - person Julien Le Coupanec; 26.04.2020

Можете да опитате следния код. Трябва да работи:

var runApp = {

  init: function(){   
     runApp.run()
  },

  run: function() { 
     alert("It's running!");
  }
};
person simba    schedule 02.07.2020