can-map.js
function (prop, value, current) {

			if ( value !== current || !Object.prototype.hasOwnProperty.call( this._data, prop ) ) {
				var computedAttr = this._computedAttrs[prop];

				// Dispatch an "add" event if adding a new property.
				var changeType = computedAttr || current !== undefined ||
					hasOwnProperty.call(this.___get(), prop) ? "set" : "add";

				// Set the value on `_data` and set up bubbling.
				this.___set(prop, typeof value === "object" ? bubble.set(this, prop, value, current) : value );

				// Computed properties change events are already forwarded except if
				// no one is listening to them.
				if(!computedAttr || !computedAttr.count) {
					this._triggerChange(prop, changeType, value, current);
				}


				// Stop bubbling old nested maps.
				if (typeof current === "object") {
					bubble.teardownFromParent(this, current);
				}
			}
		}
function (prop, value, current) {

			if ( value !== current || !Object.prototype.hasOwnProperty.call( this._data, prop ) ) {
				var computedAttr = this._computedAttrs[prop];

				// Dispatch an "add" event if adding a new property.
				var changeType = computedAttr || current !== undefined ||
					hasOwnProperty.call(this.___get(), prop) ? "set" : "add";

				// Set the value on `_data` and set up bubbling.
				this.___set(prop, typeof value === "object" ? bubble.set(this, prop, value, current) : value );

				// Computed properties change events are already forwarded except if
				// no one is listening to them.
				if(!computedAttr || !computedAttr.count) {
					this._triggerChange(prop, changeType, value, current);
				}


				// Stop bubbling old nested maps.
				if (typeof current === "object") {
					bubble.teardownFromParent(this, current);
				}
			}
		}
function ( prop , value , current ) { if ( value !== current || ! Object . prototype . hasOwnProperty . call ( this . _data , prop ) ) { var computedAttr = this . _computedAttrs [ prop ] ; // Dispatch an "add" event if adding a new property. var changeType = computedAttr || current !== undefined || hasOwnProperty . call ( this . ___get ( ) , prop ) ? "set" : "add" ; // Set the value on `_data` and set up bubbling. this . ___set ( prop , typeof value === "object" ? bubble . set ( this , prop , value , current ) : value ) ; // Computed properties change events are already forwarded except if // no one is listening to them. if ( ! computedAttr || ! computedAttr . count ) { this . _triggerChange ( prop , changeType , value , current ) ; } // Stop bubbling old nested maps. if ( typeof current === "object" ) { bubble . teardownFromParent ( this , current ) ; } } }
## __set Handles firing events if the value has changed and works with the `bubble` helpers to setup bubbling. Calls `___set` to do the actual setting.
## __set Handles firing events if the value has changed and works with the bubble helpers to setup bubbling . Calls ___set to do the actual setting .