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

高洛峰
高洛峰 原创
2016-11-25 10:58:59 857浏览

做了个有趣的实验,网上大多都是用 function (类似 person.getName()、person.setName())的方式。当然,这是一个通用的方式。

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

view sourceprint?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实现面向对象中的属性和事件,也是一件很优雅的事情。不过关于多播事件,不知园友有没有什么好主意?


声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。