2015-11-21 16 views
7

Sembra che è possibile ottenere il codice di una funzione in JavaScript, e che è il più semplice:QML - ottenere il codice di una funzione JS come una stringa

function foo() {...} 
foo.toString() 

Tuttavia, farlo in QML mi dà un po 'poco interessante function() { [code] }

Quindi c'è un modo per ottenere la parte [code] pure? Ho anche provato JSON.stringify() ma non ha funzionato.

+0

Se è una funzione incorporata, la visualizzazione del codice non sarebbe utile, poiché è probabile che sia scritta in C++. –

+0

Ottengo il '[codice]' per ogni funzione, indipendentemente dal fatto che siano compilati, da C++ o funzioni utente JS personalizzate. – dtech

+0

Questa non è in alcun modo una risposta alla tua domanda, ma ho voluto lanciare un avvertimento qui. La funzione è il mezzo fondamentale di astrazione in javascript. Riesco a vedere come sarebbe utile ai fini del test e degli strumenti per essere in grado di ispezionare il codice delle funzioni in fase di esecuzione, ma ciò potrebbe rompere la barriera di astrazione e potrebbe portare a un codice strettamente accoppiato che sarebbe difficile da mantenere. –

risposta

0

http://doc.qt.io/qt-5/qtqml-javascript-functionlist.html#function-objects

Function Properties 
    toString() 
    apply(thisArg, argArray) 
    call(thisArg [, arg1 [, arg2, ...]]) 
    bind((thisArg [, arg1 [, arg2, …]]) 

per JS-Functions, QT non supporta un'altra opzione per ottenere la stringa di una funzione. Ma se spieghi perché lo vuoi, potremmo trovare un'altra soluzione.

+0

Il tuo esempio non è nemmeno su QML. – dtech

+0

Sì, mi dispiace. Ho fatto una nuova risposta – CoderPi

+0

Ok, ho aggiunto la parte importante – CoderPi

1

Vorrei riassumere la discussione che ha avuto luogo nei commenti, per questo può essere una buona risposta per le ricerche future.

Come già affermato nei commenti, sembra essere un bug evidente di QML. Here essi sostengono che:

il runtime QML implementa la specifica del linguaggio ECMAScript serie

In ogni caso, in realtà non è così.

Grazie a Meetfe, here è il collegamento al bug aperto relativo al problema.

Lo stesso errore sembra essere here, dove essi suggeriscono di guardare il riferimento per ulteriori dettagli:

Per una descrizione dettagliata, vedere la specifica ECMA-262.

È (almeno, mi sembra) una richiesta di piena compatibilità e ancora una volta mi fa pensare a un bug, piuttosto che un'implementazione parziale delle specifiche.

Quindi, sfortunatamente questo è il modo previsto per stringere una funzione (è logico infatti, perché è un ambiente compatibile con Ecmascript), ma non funziona correttamente in QML, anche se dovrebbe come indicato nella documentazione .