首页 > web前端 > js教程 > 正文

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

高洛峰
发布: 2016-11-25 10:58:59
原创
1177 人浏览过

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


相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板