		AccessorRunner(ReferenceHandle& target, Local<Value> key_handle) :
		context{target.context},
		target{target.reference},
		key{ExternalCopy::CopyIfPrimitive(key_handle)} {
			target.CheckDisposed();
			if (!key || (!key_handle->IsName() && !key_handle->IsUint32())) {
				throw RuntimeTypeError("Invalid `key`");
			} else if (target.type_of != decltype(target.type_of)::Object) {
				throw RuntimeTypeError("Reference is not an object");
			}
		}
		AccessorRunner(ReferenceHandle& target, Local<Value> key_handle) :
		context{target.context},
		target{target.reference},
		key{ExternalCopy::CopyIfPrimitive(key_handle)} {
			target.CheckDisposed();
			if (!key || (!key_handle->IsName() && !key_handle->IsUint32())) {
				throw RuntimeTypeError("Invalid `key`");
			} else if (target.type_of != decltype(target.type_of)::Object) {
				throw RuntimeTypeError("Reference is not an object");
			}
		}