Referencia de objeto JavaScript anidado

Tengo este codigo

var string = { 
            nameString : "nameValue",
            nameString2 : "nameValue2",
            nameString3 : "nameValue3",
            datathing : 0,
        };

var data = { 
            data : 1,
            dataNum2 : 2,
            dataNum3 : 3,
            dataNum4 : 4,
        };

var thing = { 
            datathing1 : 10,
            datathing2 : 20,
            datathing3 : 30,
            datathing4 : 40,
        };

var object = { 
            object1 : string,
            data1 : data,
            thing1 : thing,
        };

¿Por qué ninguno de estos medios para acceder a los datos funciona?

alert("testReference= " + object['object1']['string']['nameString']);
alert("testReference= " + object.object1.string.nameString);

No puedo entenderlo, aunque hay ejemplos similares que se encuentran a continuación y los libros de texto declaran explícitamente que deberían funcionar:

Acceso a objetos JavaScript anidados con clave de cadena

¡Gracias por adelantado por cualquier contribución!

Actualmente estoy construyendo un objeto y pasándolo, un 'for in' mostrará los valores, pero una prueba 'typeof' o cualquier otra forma en la que intente y el acceso no funcionará, o bien me encontraré con un error (que rompe el programa). , Creo) o me sale 'indefinido' ....

Una última cosa si se resuelve, ¿está bien anidar una clave que tenga el mismo nombre que su padre, como data.data? Esto lleva a la posibilidad de anidar más, como data.data.data ...

Respuestas a la pregunta(1)

Su respuesta a la pregunta