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

  • 相关阅读:
    NTP服务器搭建
    Linux安装MongoDB 4.4.2
    CentOS安装Zookeeper 3.6.2
    CentOS安装Redis 6.0.9
    MacBook Home End
    SLES Install
    cucumber soapui test web services
    S/4 HANA Solution Manager
    Linux下创建新用户
    su with hyphen and without
  • 原文地址:https://www.cnblogs.com/sofire/p/2034569.html
Copyright © 2011-2022 走看看