JS進階學習路線——物件導向基礎

來源:互聯網
上載者:User

標籤:classname   空格   length   rip   att   ons   代碼實現   學習   rod   

比較傳統和對象的編程方式如何使用對象

定義兩個工具包

 /*產品工具包 - 儲存和產品有關的工具*/    var product={        name:‘iphone8‘,        description:‘各地區貨源已陸續到庫,我們將在十月十號左右發貨,對於此次延遲發貨給您帶來的不便表示致歉,望您諒解。‘,        price:6660,        /*繫結元素*/        bindDom:function(){},        /*綁定事件*/        bindEvents:function(){},        /*立即購買,暫時不考慮裡面的代碼是如何寫的*/        buy:function(){},        /*加入到購物車*/        addCart:function(){}    }

 

 /*購物車工具包 - 儲存和購物車有關的工具*/    var cart={        name:‘購物車‘,        products:[],        price:5000,        sum:0,        /*繫結元素*/        bindDom:function(){},        /*綁定事件*/        bindEvents:function(){},        /*結算*/        cartSum:function(){        }    }

綁定產品模組元素

window.onload=function(){        /*綁定產品模組元素*/        product.bindDom()        /*綁定購物車模組元素*/        cart.bindDom()        /*綁定產品模組事件*/        product.bindEvents()        /*綁定購物車模組事件*/        cart.bindEvents()    }
提煉對象的屬性和方法

產品對象
js使用函數+this的形式實現對象 - 這個時候的函數稱之為建構函式
js中我們一般將屬性放在上面的建構函式中,一般將方法放在下面的原型中
本質:其實是兩個對象 上面叫構造對象,下面叫原型對象 --- 簡稱雙對象定義對象法則 或者 雙函數定義對象法則

代碼實現

寫法

function 建構函式(){            this.屬性        }建構函式.原型.方法 = function(){};var 對象1 = new 建構函式();對象1.方法();

產品對象

//產品對象    /*對象內如何使用對象的屬性和方法:this,對象外如何使用:先執行個體化,後用點文法*/    function Product(name,price,description,youhuijia,zhekou,sales) {        /*屬性 行為*/        this.name =name;        this.price=price;        this.description = description;        this.youhuijia=youhuijia;        /*和產品對象相關的dom,統一管理,以後使用*/        this.doms={            btn:document.getElementById(‘btn‘),            name:document.getElementById(‘pname‘),            price: document.getElementById(‘pprice‘),            sum:document.getElementById(‘sum‘)        }    }    Product.prototype={        getPrice:function() {            return this.price        },        addToCart:function(){            alert(‘將物品添加到購物車‘)        },        bindDom:function(){            this.doms.name.innerHTML=this.name            this.doms.price.innerHTML=this.price            this.doms.des.innerHTML=this.description        },        bindEvents:function(){            /*this that之爭*/            var that = this;            this.doms.btn.onclick = function(){                that.addToCart()            }        }    }

逗逗加加法則和代碼拼接  

  Product.prototype={         bindDom:function(dom){           var str = ‘‘           str+=‘<h1 id="pname">‘+this.name+‘</h1>‘           str+=‘<div id="pdes">‘+this.description+‘</div>‘           str+=‘<div >已售:<strong id="psales">‘+this.sales+‘</strong></div>‘           str+=‘ <div>原價:<strong id="pprice">‘+this.price+‘</strong>元</div>‘           str+=‘<div>優惠價:<strong id="pyouhui">‘+this.youhuijia+‘</strong>元</div>
str+=‘<div>折扣:<strong id="pzhekou">‘+this.zhekou+‘</strong>折</div>‘ dom.innerHTML = str; }}
物件導向和列表
    var product1 = new Product()    product1.name = ‘SKII‘    product1.price = 1111    product1.zhekou = 3.5    product1.image = ‘img/boutque10_r2_c2.jpg‘    var product2 = new Product()    product2.name = ‘??????‘    product2.price = 1111    product2.zhekou = 3.5    product2.image = ‘img/boutque10_r2_c2.jpg‘    var product3 = new Product()    product3.name = ‘???‘    product3.price = 1111    product3.zhekou = 3.5    product3.image = ‘img/boutque10_r2_c2.jpg‘    var products = [product1,product2,product3]
var str=‘‘ for(var i = 0,len=products.length;i<len;i++) { str+= products[i].bindDom() } var container = document.getElementById(‘container‘) container.innerHTML=str

  

物件導向的字面量形式

json字面量其實字面量的一種簡化寫法

    // 這是JSON字串    var foo = ‘{ "prop": "val" }‘;    // 這是對象字面量    var bar = { "prop": "val" };    // 這是JSON字串,比如從AJAX擷取字串資訊    var my_json_string = ‘{ "prop": "val" }‘;    // 將字串還原序列化成對象    var my_obj = JSON.parse( my_json_string );    alert( my_obj.prop == ‘val‘ ); //  提示 true, 和想象的一樣!    // 將對象序列化成JSON字串    var my_other_json_string = JSON.stringify( my_obj );

根據某個元素中class為 clasName的所有元素

    function getByClass(obj,classname){        var elements = obj.getElementsByTagName(‘*‘);        var result = [];//    匹配字串開頭或者空格        var pattern = new RegExp( ‘^|\\s‘+ classname + ‘\\s|$‘);        for(var i = 0; i < elements.length; i++){            if(pattern.test(elements[i].className)){                result.push(elements[i]);            }        }        return result    }    var div = document.getElementById(‘div‘)    var length = getByClass(div,‘red‘).length    console.log(length)

  

 

JS進階學習路線——物件導向基礎

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.