code: function(obj, key){
  		// if a key or index
  		// like has own property
  		var hasOwnKey = obj[canSymbol.for("can.hasOwnKey")];
  		if(hasOwnKey) {
  			return hasOwnKey.call(obj, key);
  		}
  		var getOwnKeys = obj[canSymbol.for("can.getOwnKeys")];
  		if( getOwnKeys ) {
  			var found = false;
  			shapeReflections.eachIndex(getOwnKeys.call(obj), function(objKey){
  				if(objKey === key) {
  					found = true;
  					return false;
  				}
  			});
  			return found;
  		}
  		return hasOwnProperty.call(obj, key);
  	}
docs: @function can-reflect.hasOwnKey hasOwnKey
  @parent can-reflect/shape
  @description  Determine whether an object contains a key on itself, not only on its prototype chain
  
  @signature `hasOwnKey(obj, key)`
  
  Return `true` if an object's own properties include the property key `key`, `false` otherwise.
  An object may implement [can-symbol/symbols/hasOwnKey @@@@can.hasOwnKey] to override default behavior.
  By default, `canReflect.hasOwnKey` will first look for
  [can-symbol/symbols/getOwnKey @@@@can.getOwnKey] on `obj`. If present, it will call `@@@@can.getOwnKey` and
  test `key` against the returned Array of keys.  If absent, `Object.prototype.hasOwnKey()` is used.
  
  ```js
  var foo = new DefineMap({ "bar": "baz" });
  
  canReflect.hasOwnKey(foo, "bar"); // -> true
  canReflect.hasOwnKey(foo, "each"); // -> false
  foo.each // -> function each() {...}
  ```
  
  @param  {Object} obj Any MapLike object
  @param  {String} key The key to look up on `obj`
  @return {Boolean} `true` if `obj`'s key set contains `key`, `false` otherwise