您的位置:首页 > Web前端 > JavaScript

在 JavaScript 实现多播事件、属性设置/读取器

2011-05-02 20:57 393 查看
做了个有趣的实验,网上大多都是用 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


所以,用javascript实现面向对象中的属性和事件,也是一件很优雅的事情。不过关于多播事件,不知园友有没有什么好主意?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐