JS面向对象写法

“面向过程”、“面向对象”,这两个概念总是出现我们身边,那么它们到底什么区别呢?下面通过两段简单的代码,帮助大家理解一下

先写个html

//body
<button id="btn" type="button">点击切换</button>
<div id="box"></div>

//css
div{
    width:200px;
    height:200px;
    background-color:red;
}

我们的目标就是点击按钮,切换div样式,下面开始写JS部分

面向过程写法
document.getElementById("btn").onclick=function(){
    document.getElementById("box").style.backgroundColor="blue";
}

这个大家都好理解,”点击btn,box的background-color变蓝色”,直接翻译,这就是面向过程。

面向对象写法
function Change(btnId,boxId,color){
    this.btn=document.getElementById(btnId);
    this.box=document.getElementById(boxId);
    this.color=color;              //-->per(上面三个this)
};

Change.prototype.init=function(){     //添加函数(即方法)
    var that=this;             //-->per()
    this.btn.onclick=function(){
        //this;                //-->per.btn   (this不再指向per,而是this.btn)
        that.box.style.backgroundColor=that.color;
    };   
};
var per=new Change("btn","box","blue");
per.init();

这里的难点包括用函数创建对象,以及函数中this的指向.

这就是这两种思维方式的差别体现,从上面可以发现,似乎面向过程写法还简短易懂些,为什么还要求用面向对象的写法呢?

用过框架、插件的朋友看见这个就会有那么一点模糊的感觉了。

上代码:

            function my$(id) {
                return document.getElementById(id);
            }
            function Change(btnId,boxId,json){
                this.btn=btnId;
                this.box=boxId;
                this.json=json;
            };
            Change.prototype.init=function(){
                that=this;
                this.btn.onclick=function(){
                    for(var x in that.json){
                        that.box.style[x] = that.json[x];
                    } 
                };
            };
            var json={"width":"400px","height":"400px","background-color":"blue"};   //使用JSON
            var per=new Change(my$("btn"),my$("box"),json);
            per.init();

当你掌握一定的技巧后,在做大项目时,用面向对象方式的优点就出来了,对于一些同样的处理,可以直接调用函数,不用重复写代码,而且灵活度高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值