ãªãã¸ã§ã¯ãããããã£ã®ã¢ã¯ã»ã¹ãããã¯ããã
Getter,Setterãå©ç¨ããã¨ãã<ãªãã¸ã§ã¯ã>.<ããããã£>ãã§ããããã£ã«ã¢ã¯ã»ã¹ããéã«ãæå®ãã颿°ãå®è¡ãããããã«ãªãã¾ããæ³¨æ:ãã ããIEã§ã¯åä½ãã¾ããã
function Kitten( name ) { this._name = name; } // Getter, Setterã®è¨å® // ããããã£åã¨é¢æ°ãæå®ãããã Kitten.prototype.__defineSetter__( "name", function(name) { document.getElementById("stdout").innerHTML += "set name<br/>"; this._name = name; // this.name = name; ã¨ããã¨ç¡éã«ã¼ãã«ã¯ã¾ãã®ã§æ³¨æ } ); Kitten.prototype.__defineGetter__( "name", function() { document.getElementById("stdout").innerHTML += "get name<br/>"; return this._name; } ); // ã¢ãã«ã使ã var mii = new Kitten( "mii" ); // ããããã£ã«ã¢ã¯ã»ã¹ // __defineSetter__, __defineGetter__ ã§å®ç¾©ããã颿°ããå®è¡ãããã mii.name = "mii"; var name = mii.name;
ãªã¹ã追å ã¦ã¼ãã£ãªãã£ã§ä½¿ã£ã¦ã¿ãã
ããã使ãã°ãModelの更新をリスンするã§ä½ã£ããªã¹ã追å ã¦ã¼ãã£ãªãã£ã使ãå ´åã®å¶ç´ããã¢ãã«æ´æ°æã¯å®ç¾©ãããset()ã¡ã½ããã使ã£ã¦æ´æ°ãããå¿ è¦ããªããªãã¾ããã¢ãã«ã®æ´æ°ãæ®éã«"="ã§è¡ããããã«ãªãããã§ãã
/** * æ´æ°ãªã¹ãã追å ããã * @param {Object} target ãªã¹ãã追å ããã¢ãã« * @param {String} key ã¤ãã³ããã¼ * @param {Function} listener ãªã¹ã颿° */ function addListener( target, key, listener ) { if ( !target.__listeners ) { // ã¿ã¼ã²ãããæ¡å¼µããã target.__listeners = {}; // ãªã¹ãã®è¨é²å ã確ä¿ã // setterã䏿¸ãã夿´ãåãã¦ãªã¹ããããã¯ãã颿°ã«ããã target["_" + key] = target[key]; target.__defineSetter__(key, function(x) { this["_" + key] = x; if ( this.__listeners[key] ) { for (var i=0; i < this.__listeners[key].length; i++ ) { this.__listeners[key][i]( x ); } } }); } // ãªã¹ããã¿ã¼ã²ããã®å±æ§ã¨ãã¦è¿½å ã if ( !target.__listeners[key] ) { target.__listeners[key] = [] } target.__listeners[key].push( listener ); } // ã¢ãã« function Kitten( name, age ) { this.name = name; this.age = age; this.state = "stop"; } // ã¢ãã«ã使ã var mii = new Kitten( "mii", 1 ); // ãªã¹ããè¨å® addListener( mii, "state", function( state ) { document.getElementById("stdout1").innerHTML = state; } ); addListener( mii, "state", function( state ) { document.getElementById("stdout2").innerHTML = state; } ); addListener( mii, "state", function( state ) { document.getElementById("stdout3").innerHTML = state; } ); /** ã³ã³ããã¼ã©ã¼ */ function KittenService( kitten ) { this.kitten = kitten; } KittenService.prototype = { run: function() { this.kitten.state = "running"; // æ®éã«ãã£ã¼ã«ããæ´æ° }, stop: function() { this.kitten.state = "stop"; }, jump: function() { this.kitten.state = "jump!"; } } var service = new KittenService( mii ); service.run();