code: function(cls, key, properties) {
  		var defineInstanceKey = cls[canSymbol.for("can.defineInstanceKey")];
  		if(defineInstanceKey) {
  			return defineInstanceKey.call(cls, key, properties);
  		}
  		var proto = cls.prototype;
  		defineInstanceKey = proto[canSymbol.for("can.defineInstanceKey")];
  		if(defineInstanceKey) {
  			defineInstanceKey.call(proto, key, properties);
  		} else {
  			Object.defineProperty(
  				proto,
  				key,
  				shapeReflections.assign({
  					configurable: true,
  					enumerable: !typeReflections.isSymbolLike(key),
  					writable: true
  				}, properties)
  			);
  		}
  	}
docs: @function {Function, String|Symbol, Object} can-reflect.defineInstanceKey defineInstanceKey
  @parent can-reflect/shape
  @description Create a key for all instances of a constructor.
  
  @signature `defineInstanceKey(cls, key, properties)`
  
  Define the property `key` on the prototype of the constructor `cls` using the symbolic
  property [can-symbol/symbols/defineInstanceKey @@can.defineInstanceKey] if it exists; otherwise
  use `Object.defineProperty()` to define the property.  The property definition
  
  @param  {Function} cls  a Constructor function
  @param  {String} key     the String or Symbol key to set.
  @param  {Object} properties a JavaScript property descriptor