code: function IceCandidate(iceCandidateDict){
    if(!(this instanceof IceCandidate))
      return new IceCandidate(iceCandidateDict)
  
    // Check iceCandidateDict has the required fields
    checkType('String', 'iceCandidateDict.candidate', iceCandidateDict.candidate, {required: true});
    checkType('String', 'iceCandidateDict.sdpMid', iceCandidateDict.sdpMid, {required: true});
    checkType('int', 'iceCandidateDict.sdpMLineIndex', iceCandidateDict.sdpMLineIndex, {required: true});
  
    // Init parent class
    IceCandidate.super_.call(this, iceCandidateDict)
  
    // Set object properties
    Object.defineProperties(this, {
      candidate: {
        writable: true,
        enumerable: true,
        value: iceCandidateDict.candidate
      },
      sdpMid: {
        writable: true,
        enumerable: true,
        value: iceCandidateDict.sdpMid
      },
      sdpMLineIndex: {
        writable: true,
        enumerable: true,
        value: iceCandidateDict.sdpMLineIndex
      }
    })
  }
docs: IceCandidate representation based on standard
  (http://www.w3.org/TR/webrtc/#rtcicecandidate-type).
  
  @constructor module:elements/complexTypes.IceCandidate
  
  @property {external:String} candidate
  The candidate-attribute as defined in section 15.1 of ICE (rfc5245).
  @property {external:String} sdpMid
  If present, this contains the identifier of the 'media stream
  identification'.
  @property {external:Integer} sdpMLineIndex
  The index (starting at zero) of the m-line in the SDP this candidate is
  associated with.