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

做了个有趣的实验,网上大多都是用 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实现面向对象中的属性和事件,也是一件很优雅的事情。不过关于多播事件,不知园友有没有什么好主意?

转载于:https://www.cnblogs.com/sofire/archive/2011/05/02/2034569.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值