日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

没有run窗口_学会了面向对象,还怕没有对象?

發(fā)布時間:2023/12/15 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 没有run窗口_学会了面向对象,还怕没有对象? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
面向?qū)ο笫且环N編程思想,我們通過類(構(gòu)造函數(shù))和對象實現(xiàn)的面向?qū)ο缶幊?#xff0c;滿足下述三個特定:封裝、繼承和多態(tài)。

封裝

封裝創(chuàng)建對象的函數(shù)

封裝即把實現(xiàn)一個功能的代碼封裝到一個函數(shù)中,以后實現(xiàn)這個功能,只需要執(zhí)行該函數(shù)即可。實現(xiàn)低耦合,高內(nèi)聚。

現(xiàn)在我們把屬性和方法封裝成一個對象:

如果我們想創(chuàng)建一個不同性別不同姓名的對象,就需要再寫一遍上述代碼:

如果我們想要創(chuàng)建多個對象的話,寫起來就非常麻煩,所以要去封裝創(chuàng)建對象的函數(shù)解決代碼重復的問題。

然后生成實例對象,就等于是在調(diào)用函數(shù):

上述過程可以類比為開工廠生產(chǎn)酸奶:第一步:需要原料;第二步:加工酸奶;第三步:出廠售賣;我們通過var聲明空對象的這一步就相當于第一步原料,添加屬性和函數(shù)就相當于第二步加工,通過return返回對象就相當于第三步出廠。這種符合上述1、2、3步驟的函數(shù)叫做工廠函數(shù),這種設計函數(shù)的思路,叫做工廠設計模式。

通過new調(diào)用函數(shù)

官方函數(shù)創(chuàng)建對象的方法是通過new的方法,當我們不使用new創(chuàng)建對象的時候,函數(shù)內(nèi)部的this會指向窗口。

所以當我們在函數(shù)內(nèi)部給this.name賦值為xxxx時,可以通過window.name輸出xxxx,因為如果這個函數(shù)沒有主人的話它的主人就是window對象。

但是如果這個函數(shù)通過new運算符去調(diào)用,那么這個函數(shù)中的this,就會指向新創(chuàng)建的對象。

當我們通過new運算符去調(diào)用函數(shù)的時候,它首部和尾部會自動的生成以下兩步:1、原料操作:強制改變this指向this = new Object(); 3、出廠操作:將this返回return this;。

所以現(xiàn)在我們改造一下之前創(chuàng)建的函數(shù),調(diào)用的時候全部都通過new去調(diào)用,并且將函數(shù)中的person改成this。

構(gòu)造函數(shù)

我們把這種可以創(chuàng)建對象的函數(shù),叫做構(gòu)造函數(shù)。(功能就是用來構(gòu)造對象)

為了和別的函數(shù),進行區(qū)分,我們把構(gòu)造函數(shù)首字母大寫。官方的構(gòu)造函數(shù):Array、Object、Date。

我們通過typeof可以看到官方通過new創(chuàng)建的Object、Array、Date本質(zhì)上都是function函數(shù)。而且所有被該函數(shù),創(chuàng)建的對象,對象的方法都是一套,arr1.push === arr2.push返回值是true。

但是通過調(diào)用函數(shù)生成的對象方法,彼此之間沒有聯(lián)系,不能反映出它們是同一個原型對象的實例。alert(p1.showName === p2.showName);返回值為false。

我們聲明兩個數(shù)組

給數(shù)組添加求和的函數(shù)

調(diào)用arr1.sum可以輸出arr1的和為150,但是調(diào)用arr2.sum會系統(tǒng)報錯,提示arr1.sum不是一個函數(shù)。因為arr1和arr2是單獨的兩個對象,給arr1添加一個方法,arr2并不會擁有這個方法。所以我們之前通過new調(diào)用函數(shù)生成對象后,他們的方法是相互獨立的。

每一個實例對象,都有自己的屬性和方法的副本。這不僅無法做到數(shù)據(jù)共享,也是極大的資源浪費。

原型prototype

prototype對象的引入:所有實例對象需要共享的屬性和方法,都放在這個對象中,那些不需要共享的屬性和方法,就放在構(gòu)造函數(shù)中。以此來模擬類。

所以想讓arr2也擁有求和函數(shù)就需要再重新寫一個arr2.sum,這樣就會造成浪費,我們想讓對象共用一個方法,這時候就需要引入原型prototype。在JS中一切皆對象,函數(shù)也是對象。 每一個被創(chuàng)建的函數(shù),都有一個官方內(nèi)置的屬性,叫做prototype(原型)對象 ,我們輸出一下show.protoype,得到結(jié)果[object Object]

所有實例對象需要共享的屬性和方法,都放在這個對象里面;那些不需要共享的屬性和方法,就放在構(gòu)造函數(shù)里面。

如果,我們想要讓該函數(shù)創(chuàng)建出來的對象,公用一套函數(shù),那么我們應該將這套函數(shù),添加該函數(shù)的prototype原型。 所以我們?nèi)绻胱寖蓚€數(shù)組都擁有求和的方法,就需要將這個方法添加在Array的原型上。

現(xiàn)在arr1和arr2都可以使用這個函數(shù),并且arr1.sum == arr2.sum,他們使用的這個函數(shù)都是原型上的同一個方法。

我們可以通過混合法,讓用戶自定義構(gòu)造函數(shù),封裝一個可以創(chuàng)建對象的函數(shù),并且調(diào)用的是同一個方法。

面向?qū)ο缶幊贪咐?/strong>

現(xiàn)在我們要測試100輛不同品牌的汽車,記錄他們在道路上行駛的性能指數(shù)。

創(chuàng)建一個可以構(gòu)造各式各樣車的構(gòu)造函數(shù)

在Car的原型上添加功能:讓車跑在路上,計算時速。

1. Car.prototype.run = function(road){2. alert(`一輛${this.type}品牌的${this.name}系列,時速為${this.speed}km/h的車,跑在長度為${road.length}km的${road.name},最終的成績是${road.length / this.speed}小時`);3. }

創(chuàng)建一個可以構(gòu)造各式各樣馬路的構(gòu)造函數(shù)

添加第一個測試用例car1:

1. var kuahaidaqiao = new Road("跨海大橋

總結(jié)

以上是生活随笔為你收集整理的没有run窗口_学会了面向对象,还怕没有对象?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。