面向对象编程-红绿灯

1、利用原生的JavaScript 实现

var honglvdeng = document.getElementsByClassName("honglvdeng")[0];
    //console.log(honglvdeng)
    var inx = 0;
    honglvdeng.onclick = function () {
        inx++;
        inx = inx > 2 ? 0 : inx;
        this.style.backgroundPosition = (inx * -155) + "px 0";
    }

2、利用面向对象思想 实现

给构造器绑定一个信号量属性,然后每一个实例就都拥有了这个信号量,而且是单独的

如果需要100个红绿灯,不用手动写100个div标签,而是要将div变为一个类

function Honglvdeng() {
        //信号量
        this.inx = 0;
        //初始化dom
        this.init();
        //绑定事件
        this.bindEvent()
    }
    Honglvdeng.prototype.init = function () {
        
        this.dom = document.createElement("div");
        this.dom.className = "honglvdeng";
        document.getElementById("box").appendChild(this.dom);
       
    }
    Honglvdeng.prototype.bindEvent = function () {
        console.log(this);
        //备份this
        var self = this;
        this.dom.onclick = function () {
            self.inx ++ ;
            //console.log(self.inx)
            self.inx = self.inx > 2 ? 0 : self.inx;
           // console.log(self.inx)
            this.style.backgroundPosition = (self.inx * -155) + "px 0";
        }
    }

   var num = 10;
   while (num--) {
       new Honglvdeng;
   }

面向对象编程的信号量思维其实就是将信号量放到实例身上,然后每个人有自己独立的信号量,然后点击切换红绿灯的时候改变的都是自己的信号量

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值