JavaScript 多播事件、属性设置/读取器类偌

作者:简简单单 2011-05-03

网上大多都是用 function (类似 person.getname()、person.setname())的方式。当然,这是一个通用的方式。

但是在非 ie 的浏览器下,你可以尝试运行以下代码

function person()
{
 var _name
  ,_age,_sex;
   
    var _namechanged = new array();

    this.__definegetter__('namechanged',function()
 {
  return _namechanged;
 });
 this.__definesetter__('namechanged',function(value)
 {
  _namechanged.push(value);
 });

 this.__definegetter__('name',function()
 {
  return _name;
 });
 this.__definesetter__('name',function(value)
 {
        if(this.namechanged != null)
        {
            for(var f in _namechanged)
            {
                _namechanged[f](value);
            }
        }
  _name = value;
 });
 
 this.__definegetter__('age',function()
 {
  return _age;
 });
 this.__definesetter__('age',function(value)
 {
  _age = value;
 });
}
person.prototype =
{
    get sex()
    {
        return _sex;
    },
    set sex(value)
    {
        _sex = value;
    }
};
var person = new person();

person.namechanged = function()
{
    alert('event 1');
}
person.namechanged = function()
{
    alert('event 2');
}

person.name = 'treenew';
person.age = '22';
person.sex = 'man'
alert('the ' + person.name + ' age is '+ person.age + '. the sex value is ' + person.sex);
alert(person._sex); //undefined

相关文章

精彩推荐