面向對象編程js(面向對象編程JAVA)

本文目錄一覽:

js是面向對象的編程語言嗎

是的,js是基於對象的,連他的function函數都是一種對象。所以是面向對象的!

js 什麼是面向對象

面向對象是一種開發方法或者是開發思想,面向對象是一種對現實世界理解和抽象的方法,是計算機編程技術發展到一定階段後的產物。

如何用javascript面向對象編程

經常看到一些JavaScript的代碼髒亂得無法理解,到處都是屬性和方法,或者一個循環套著一個循環。但如果使用面向對象就能很好的理清代碼,並方便理解和修改代碼。如果你不希望自己的代碼只有上帝理解的話,就請盡量考慮使用面向對象的模式。

譯文正文:

到處都是屬性、方法,代碼極其難懂,天哪,我的程序員,你究竟在做什麼?仔細看看這篇指南,讓我們一起寫出優雅的面向對象的JavaScript代碼吧!

作為一個開發者,能否寫出優雅的代碼對於你的職業生涯至關重要。隨著像Node.js這類技術的發展,你甚至可以在伺服器端使用JavaScript了。同樣的,你也可以使用JavaScript來控制MongoDB的持續數據存儲。

文本標記

文本標記只是JavaScript里創建對象的一種方法,當然這裡肯定不止這一種,但它是你在只打算創建一個對象實例時的首選方法。

var bill = {};

上面的代碼並不實用,它只是一個空對象。接下來我們動態地向這個對象中添加一些屬性和方法。

bill.name = “Bill E Goat”; bill.sound = function() { console.log( ‘bahhh!’ ); };

這裡添加了屬性name,並且給它分配了值”Bill E Goat”。我們並不需要先創建一個空對象,而可以把所有代碼直接寫在一對括弧里。

var bill = { name: “Bill E Goat”, sound: function() { console.log( ‘bahhh!’ ); }};

是不是很美觀?訪問它的屬性和方法就像呼吸一樣簡單、自然。

bill.name; // “Bill E Goat” bill.sound(); // “bahhh”

如果屬性名不是一個合法的標誌符,我們還可以這樣訪問它:

bill[‘name’]; // “Bill E Goat”

注意:我在調用方法時在其後添加了圓括弧。現在,我們再重寫一下當前的sound方法,並添加一個參數。

bill.sound = function(noise) { console.log(noise); }; bill.sound(“brrr!”); // “brrr!” He’s cold :)

很好,我們已經傳入參數了,並且在方法定義中訪問了它。接下來,向對象中增加一個新方法來訪問name屬性。

bill.sayName = function() { console.log( “Hello ” + this.name ); }; bill.sayName(); // “Hello Bill E Goat”

我們可以使用this.propertyName(在本例中即this.name)在方法內訪問屬性。

bill.sayName; // function

怎麼回事?訪問sayName方法返回了一個方法定義。現在讓我們再深入些。

var sound = bill.sound; sound(‘moo!’); // “moo!”

現在我們指定了sound方法為一個局部函數,可以調用這個函數並且傳遞參數。你認為在複製bill的時候會發生什麼?(類比下克隆羊Dolly)

var sally = bill; sally.name; // “Bill E Goat”,可它的名字是Sallysally.name = “Sally”; sally.name; // “Sally”,好些了bill.name; // “Sally”,問題又轉移到bill身上了

上面的例子中我們新建了一個變數sally,並使它和bill相同,所以bill和sally會在內存中引用了同一個對象。這時候給改變一塊它們就會同時發生改變。再看看下面這段代碼:

bill.name = “Bill E Goat”; bill.sayName(); // “Hello Bill E Goat”; var sayName = bill.sayName; sayName; // function 目前為止一切順利sayName(); // “Hello “,為什麼這裡又不再顯示bill的名字了?

bill的name是一個本地實例變數,只對bill可得。當sayName方法被創建為全局變數時,當它碰到this.name聲明時,它會在全局查找name的值。唯一的問題在於name還沒有被定義。現在讓我們在全局定義name,看看會發生什麼:

var name = “Bearded Octo”; sayName(); // “Hello Bearded Octo”

這裡我們在全局範圍內定義了name變數,並且賦予了值”Bearded Octo”。當我們在調用sayHello方法時它會在全局範圍內查找name變數,最終會獲得值”Bearded Octo”。我們為什麼不為這幾個對象建立一個共同的「類」呢?

構造函數

構造函數是另一個編寫面向對象JavaScript代碼的方法,當你需要初始化對象的屬性、方法,或者需要創建多個屬性、方法各不相同的實例時,它將是你最佳的選擇。同樣我們先從創建一個空對象開始:

function Game() {};

這個對象包括自己的屬性,你甚至可以在創建對象時傳入屬性,然後再對其進行修改。

var zelda = new Game(); var smb = new Game(); zelda.title = “Legend of Zelda”; smb.title = “Super Mario Brothers”; zelda.title; // “Legend of Zelda” smb.title; // “Super Mario Brothers”

現在這個對象已經有自己的方法了!新創建對象時我們甚至可以傳遞屬性,之後再修改。

function Game(title) { this.title = typeof title !== ‘undefined’ ? title : “”; }; var zelda = new Game(“Legend of Zelda”); zelda.title; // “Legend of Zelda” zelda.title = “Ocarina of Time”; zelda.title; // “Ocarina of Time” var blank = new Game(); blank.title; // “”

也許你沒看明白第二行的內容,其實是使用了三元操作來避免單行的if else,它和下面標準的if else語句是一個意思。

if (typeof title !== ‘undefined’) { this.title = title; } else { this.title = “”; } // Is the same as this.title = typeof title !== ‘undefined’ ? title : “”;

如果title變數在對象被創建時傳入,title實例變數將會指定為title的值。如果沒有值傳入,那麼title將會被初始化為默認值””。我們同樣可以創建一個方法來訪問這個屬性:

zelda.loveTitle = function() { console.log( “I love ” + this.title ); }; zelda.loveTitle(); // “I love Ocarina of Time”

這樣就很整潔了,但是我們還能做得更好。我們可以在Game類中添加一個方法,這樣所有Game類的實例將都能使用此方法。

Game.prototype.heartIt = function() { console.log( “I heart ” + this.title ); }; zelda.heartIt(); // “I heart Ocarina of Time” smb.heartIt(); // “I heart Super Mario Brothers”

原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/128347.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
簡單一點的頭像簡單一點
上一篇 2024-10-03 23:24
下一篇 2024-10-03 23:24

相關推薦

  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29

發表回復

登錄後才能評論