簡體   English   中英

Javascript 靜態方法與實例方法

[英]Javascript Static Method vs Instance Method

所以我是 javascript(或任何編程語言)的新手,隨着我的進步,我聽到了新的關鍵字。

我在 Stackoverflow 上遇到了這個問題: How to access a method from a class from another class?

回復或回答者寫了這樣的東西..

如果是靜態方法(不使用任何實例數據),則將其聲明為靜態方法,您可以直接調用它。

如果它是一個實例方法,那么您通常會創建一個類型為 one 的對象,然后在該對象上調用該方法(通常在構造函數中)。

有人可以用例子解釋靜態方法和實例方法之間的區別嗎? 我們如何在 javascript 中調用靜態和實例方法

這個答案不是針對 Javascript,而是針對一般的 OOP。

想象一下,你有一個Person類。 該類的一個實例可以是daniel

實例方法

你可以在daniel上調用一個方法,例如: daniel.talk() ,所以daniel開始說話......

靜態方法

您可以在類Person上調用靜態方法,而不是在具體實例上調用,例如: Person.getPeopleFromNewYork() 請注意, getPeopleFromNewYorkPerson任何實例無關,而是與類本身相關。

(通常,像getPeopleFromNewYork()這樣的方法屬於某種存儲庫,但這僅用於示例。)

理解靜態方法的另一個說明性示例是Math.sum(2, 5)Random.randomInt()

對於 Javascript 特定的答案,請訪問此鏈接(我通過谷歌搜索找到了它)看起來不錯。

但是無論您選擇了哪種面向對象的編程語言; 通常,您會對不需要知道類的其他字段/屬性狀態的功能使用靜態方法。 例如,將一種長度單位轉換為另一種長度單位不需要知道對象的其他屬性是什么。 另一方面,讓我們假設我們有一個類 Customer,它具有名字和姓氏的屬性。 現在,如果您需要通過連接名字和姓氏來派生全名,您可以在類 GetFullName() 上創建一個方法,該方法不接受參數並為您完成工作。 因此,在 Customer 類型的對象上,您可以使用不帶任何參數的 object.GetFullName() 來獲取全名。 當然,您可以為相同的目的編寫一個靜態方法,但是您必須將參數傳遞給該方法。 對於依賴大量參數的方法來說,會很麻煩。

Javascript 有兩種類型的屬性和方法。 靜態和實例類型的屬性和方法都可以使用。

首先,您需要知道如何在 javascript 中定義對象。兩種主要方式是使用 {} 或使用構造函數。 在 {} 中,每個屬性和方法都是靜態的,您無法創建它的實例,例如:

<script> 

var person = {name:"Chayon Shaah",age:"30",say:function(){return "Hello "+this.name}} 
alert(person.say()); // will allert "Hello Chayon Shaah"

</script>

只看代碼,這里你需要通過對象引用調用任何屬性或方法,並且不能使用 new 關鍵字創建這個人對象的任何實例

現在看看構造函數,它如何創建一個實例:

<script>
function Person(){
 this.name="Chayon Shaah",
 this.age = 30,
 this.say = function(){
 return "Hello "+this.name;
 }

}

var obj = new Person();
alert(obj.say()); // will alert "Hello Chayon Shaah"

</script>

這里所有的 Person 對象屬性和方法都可以通過“obj”訪問,它是 Person 對象的一個​​實例。

Person 對象不能直接訪問它們,只有它的任何實例才能訪問它們。 另一方面,您可以對 Person 對象使用靜態屬性或方法,該對象只能通過其自身訪問,而不能通過其任何實例訪問。

讓我們在 Person 對象中添加更多實例屬性和靜態屬性...

<script>
function Person(){
 this.name="Chayon Shaah",
 this.age = 30,
 this.say = function(){
 return "Hello "+this.name;
 }

}

var obj = new Person();
alert(obj.say());

Person.prototype.city = "Mymensingh"; // only can be used by all instances of Person object (non static property).


  alert(obj.city); // Will alert "Mymensing" (Calling via instance of Person)

Person.location = "Bangladesh"; //This is a static property which can not be accessed by any instance of Person object, Only accessed by Person Object.
 `alert(Person.location); // Will alert "Bangladesh" (Calling directly via` Person object)
</script>

使用“prototype”關鍵字來創建具有主對象名稱的任何實例方法或屬性,如果你想創建靜態屬性和方法,那么只需使用名稱而不像示例那樣使用“prototype”關鍵字。

我想它會幫助你...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM