• 技术文章 >web前端 >js教程

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

    高洛峰高洛峰2016-11-25 10:58:59原创708
    做了个有趣的实验,网上大多都是用 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核实处理。
    专题推荐: JavaScript
    上一篇:jqGrid 获取列值 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • react怎么实现滚动条• react 怎么实现按需加载• 一文聊聊node文件的读写操作• Angular学习之聊聊独立组件(Standalone Component)• 浅析Angular中的Change Detection机制
    1/1

    PHP中文网