Javascript靜態變數與例項變數

2021-07-07 01:32:27 字數 1608 閱讀 2829

嚴格的來講,js裡面並沒有靜態與私有的概念,所有成員屬性都是公開的,下面只是參考oo語言,通過某種方式來實現類似的概念。

一。靜態變數

1.私有靜態變數

所有例項共享。因為是私有的變數,所以不能通過函式名直接訪問。通過閉包來實現。

根據閉包的作用域原理,只能在閉包內部訪問。所以,並不是類的任何地方都可以訪問這個靜態變數。只有類的建構函式或者方法(原型方法),在閉包內部才可以訪問。

js**  

(function()  

this.getprivatestatic = function()  

}  })();  

var func1 = new func();  

var func2 = new func();  

console.log(func1.getprivatestatic());// privatestatic

console.log(func2.getprivatestatic());// privatestatic

console.log(func1.setprivatestatic('changed'));   

console.log(func2.getprivatestatic()); //changed

2.公共靜態變數

這個比較簡單,直接對函式定義屬性。

backbone的extend函式,有兩個引數,第乙個引數是例項變數,第二個引數是靜態變數。期中靜態變數的實現就是這種方式。

js**  

func = function()  

func.acfun= 'net';  

console.log(func.acfun); //net

二。例項變數

1.私有例項變數

在建構函式裡面,通過var定義的變數,都是私有例項變數,只有在構造的內部才能訪問。 

js**  

var person = function(value)  

}  person.prototype._getage = function()  

var yaoming = new person('27');  

console.log(yaoming.age) //undefined

console.log(yaoming.getage()) //27

console.log(yaoming._getage()) // age is not defined,原型方法不能訪問age,僅在建構函式內部可以訪問私有例項變數

2.公共例項變數

在建構函式或原型方法中使用this定義的屬性,以及原型中定義的屬性.

使用new 操作符對建構函式是例項化,會建立乙個新的物件,並且將建構函式的作用域賦給新物件,並執     行**,那麼建構函式中如果有this定義屬性或方法,則是對新物件新增屬性或方法。

js**  

var person = function(name)  

person.prototype.age = '11';  

var yaoming = new person('ym');  

console.log(yaoming.name);  

console.log(yaoming.age); //11

javascript 靜態變數與例項變數

剛看網易公開課stanford程式設計方法學的第九課 提到static靜態變數和instance variable例項變數,我想js肯定也有 研究了一下,如下 靜態變數static是class的所有object都共享的,那麼在靜態變數static只能定義在建構函式外面,但是又要只能被同乙個class...

靜態變數與動態變數

1 靜態儲存變數通常是在變數定義時就分定儲存單元並一直保持不變,直至整個程式結束。靜態變數,全域性動態變數都是靜態儲存 2 動態儲存變數是在程式執行過程中,使用它時才分配儲存單元,使用完畢立即釋放 3 靜態儲存變數是一直存在的,而動態儲存變數則時而存在時而消失。通常把由於變數儲存方式不同而產生的特性...

靜態變數與動態變數

1 靜態儲存變數通常是在變數定義時就分定儲存單元並一直保持不變,直至整個程式結束。靜態變數,全域性動態變數都是靜態儲存 2 動態儲存變數是在程式執行過程中,使用它時才分配儲存單元,使用完畢立即釋放 3 靜態儲存變數是一直存在的,而動態儲存變數則時而存在時而消失。通常把由於變數儲存方式不同而產生的特性...