Funkcja apply i błąd – co robię źle?

0

Witam !
Mam taki kod :

var modules = {}

function apply_to_B(instance) {
  modules['B'] = instance.apply(instance,function() {
    function a() {
      console.log('aaaaaaaaaaaaaaaa');
    }
    return {
      a:a
    }
  });
}

apply_to_B(function(mod) {
  console.log(mod);
  function b() {
    mod.a();
  }
  return {
    b:b
  }
});

let ret = modules['B'];
ret.b();

Wyskakuje TypeError: Cannot read property 'a' of undefined. Co robię źle ?

1

Dla mnie jest to zamotane, ale spróbuję. W tym momencie let ret = modules['B']; zakładasz, że obiekt modules posiada właściwość B – a on jej, tak mi się wydaje, nie posiada, ponieważ żeby posiadał, trzeba wywołać najpierw funkcję apply_to_B – a ona jest wywoływana dopiero potem, w wywołaniu ret.b().

0
Silv napisał(a):

Dla mnie jest to zamotane, ale spróbuję. W tym momencie let ret = modules['B']; zakładasz, że obiekt modules posiada właściwość B – a on jej, tak mi się wydaje, nie posiada, ponieważ żeby posiadał, trzeba wywołać najpierw funkcję apply_to_B – a ona jest wywoływana dopiero potem, w wywołaniu ret.b().

Zaremowałem //let ret = modules['B']; //ret.b() to wywala że console.log(mod) jest undefined

1

https://ideone.com/FJzXrs

js: uncaught JavaScript runtime exception: TypeError: second argument to Function.prototype.apply must be an array

(Przy czym poprawiłem parę rzeczy, zgodnie z http://jshint.com/).

0

Dzięki za pomoc !

Mam jeszcze jedno pytanie, jak przeczytać error który zwraca 'stderr' ? Obudowałem funkcję appy_to_B w bok try ... catch ale nie zwraca mi błędu tak jak na https://ideone.com/FJzXrs.

function apply_to_B(instance) {
"use strict";
 try{
   modules['B'] = instance.apply(instance,m);
 }catch(err){
   console.error(err);
 }
}
1

Tutaj zwraca błąd do stderr: https://ideone.com/tpaONx

1 użytkowników online, w tym zalogowanych: 0, gości: 1