No estoy seguro de cómo definir este new member , consulte la demostración a continuación, lo que quiero es ListNewMemberNames :
El código (demo.html) se supone que se ejecuta en un navegador
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Var1 Test</title> </head> <body> <script> var1 = {value:7} /* same as window.var1 = {value:7}*/ ListMemberNames(window) /* returns: ["__defineGetter__", ... "addEventListener", "alert", ... "var1"] */ ListNewMemberNames(window) /* returns: ["var1"] */ function ListMemberNames(obj){ /* tricks with .hasOwnProperty() or something*/ } function ListNewMemberNames(obj){ /* ? */ } </script> </body> </html>En general, no puede analizar el entorno léxico actual (o externo) (la asignación de nombres de variables a sus valores) dinámicamente en JavaScript. Esto solo es posible en el nivel superior debido al hecho de que las variables de nivel superior declaradas con var (o sin nada en absoluto) se asignan a la ventana: verifique las propiedades que existen en la ventana al comienzo de la carga de la página, colóquelo en una matriz, luego mire las propiedades que existen en ella más tarde y encuentre la diferencia.
// always run this first const properties = Object.getOwnPropertyNames(window); // then your code does something var1 = {value:7} // and it is detectable by doing: const newPropertiesOnWindow = Object.getOwnPropertyNames(window) .filter(prop => !properties.includes(prop)); console.log(newPropertiesOnWindow);Es posible hacerlo, apenas, pero no puedo pensar en ninguna buena razón para querer hacerlo.