var {func, scope} = _R.createMagicClosure(function(){return a;}, {a: 1}); scope.a = 3; func(); // 3 scope.a = 5; func(); // 5 Wkrótce w #javascript ( ͡°͜ʖ͡°) Piwo dla tego, kto zgadnie jak będzie działać ta metoda.
@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
var {func, scope} = _R.createMagicClosure(function(){return a;}, {a: 1});scope.a = 3;func(); // 3scope.a = 5;func(); // 5Wkrótce w #javascript ( ͡° ͜ʖ ͡°)
Piwo dla tego, kto zgadnie jak będzie działać ta metoda.
Komentarz usunięty przez autora
var {func, scope} jest przypisywany do kolejnych argumentów przyrównanej funkcji czyli w tym przypadku funkcji zwracajacej wartosc a.
tzw. Destructuring assignment
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
Dziwi mnie tylko ze w node 12 z flaga harmony dostaje
>var [foo, bar] = ['foo', 'bar'];SyntaxError: Unexpected token [
:( na szczescie Babel kompiluje, ponizej output Twojego przykladu:
"use strict";
var _R$createMagicClosure = _R.createMagicClosure(function () {
return a;
}, { a: 1 });
var func =
Komentarz usunięty przez autora
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++;}, {a: {b: NaN}});func(); //NaNscope.a.b=6;func(); // 6scope.a.b // 7( ͡° ͜ʖ ͡°)
( ͡° ͜ʖ ͡°)ノ⌐■-■
(⌐ ͡■ ͜ʖ ͡■)
Na komórce tego nie napiszę, wieczorem będę mieć kompa dopiero :P