     if thingyverse._.per_thingy[ id ]?
       throw( "Heron.Thingy: Thingy #{id} already exists." )
 
+    after_construction_functions = []
+
     @_ =
       thingyverse: thingyverse
       typename:    typename

#
# Every initializer should be a function which takes two arguments -- `attrs`
# and `local_data` -- and returns a delegate.  The `this` of the initializer
# will be set to the thingy object.
#
# As convenience and for future compatibility, {Heron.Thingyverse} defines
# {#batch}, {#begin}, and {#finish}, to provide batch semantics.  At present,

        if @_.removed
          throw( "Heron.Thingy: Trying to do something with removed thingy #{@id()}" )

    @after_construction = ( f ) -> after_construction_functions.push( f )
    @_.delegate = @_.type_data.initializer.call( this, attrs, local_data )
    delete @after_construction

    thingyverse._.per_thingy[ id ] =
      thingy:   this
      delegate: @_.delegate

    for f in after_construction_functions
      f.call( this )

  # ID.
  # @return [String] ID.
