G.....n
G.....n
var {func, scope} = _R.createMagicClosure(function(){return a;}, {a: 1});
scope.a = 3;
func(); // 3
scope.a = 5;
func(); // 5
Wkrótce w #javascript ( ͡° ͜ʖ ͡°)
P--o dla tego, kto zgadnie jak będzie działać ta metoda.
4
  • Najlepsze
  • Wszystkie komentarze
G.....n
G.....n
@zara2st: No, ale co to ma wspólnego? :P
1
z.....t
z.....t
@Ginden: pingnij jak sypniesz magiczna klołżurą.
1
G.....n
G.....n
@foke: Znacznie więcej magii.
0
z.....t
z.....t
@Ginden:

var {func, scope} jest przypisywany do kolejnych argumentów przyrównanej funkcji czyli w tym przypadku funkcji zwracajacej wartosc a.

tzw. Destructuring
0
z.....t
z.....t
@Ginden: jak to co? Wyjasniam Twoj przyklad.
0
z.....t
z.....t
@foke: @Ginden: macie racje, sorry
0
G.....n
G.....n
@Hermandad: @foke @zara2st:
https://github.com/Ginden/reflect-helpers/blob/dev/reflect-helpers.js
Po wklejeniu kodu biblioteki w konsolę, można wykonać następujące testy:

var {func, scope} = _R.createMagicClosure(function(){return a.b++;},
0
Marmite
@Ginden: Zapewne coś w stylu zawracania funkcji która odwołuje się do funkcji X (bo mamy referencje, a nie wskaźniki). Funkcja X to po prostu New Function(fn.toSttring()) z wstrzykniętymi dodatkowymi deklaracjami zmiennych (Object.getOwnPropertyKeys na scope). No i jeszcze defineProperty na wszystkich własnościach scope, żeby mnie gettery/settery które podmienią funkcję X na inną.

Na komórce tego nie napiszę, wieczorem będę mieć kompa dopiero :P
0
G.....n
G.....n
@Marmite: Implementację i tak masz w linku wyżej. Ale ogólnie to masz rację i mniej-więcej tak to działa.
0
Marmite
Treść przeznaczona dla osób powyżej 18 roku życia...
0
z.....t
z.....t
@Ginden: takie budowanie kodu ze stringow bylo konieczne?
0
G.....n
G.....n
@zara2st: Tak.
0