Rumah  >  Artikel  >  hujung hadapan web  >  在 JavaScript 实现多播事件、属性设置/读取器

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

高洛峰
高洛峰asal
2016-11-25 10:58:591166semak imbas

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


Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn