靜態成員與例項成員

2021-07-15 22:57:22 字數 1449 閱讀 4523

靜態成員與例項成員

成員:屬性和方法。

例項:由建構函式建立出來的物件。

靜態成員:和建構函式相關的屬性和方法。

例項成員:由建構函式建立出來的物件的屬性和方法。

靜態成員與建構函式有關,例項成員與例項有關。

靜態成員和例項成員一般情況下是不能直接相互訪問的,即:例項(物件)是無法直接訪問靜態成員的;反之也是同樣道理。

例項為什麼訪問不到靜態成員?例項遵循屬性搜尋原則,只看物件本身以及物件的原型鏈,原型鏈中沒有建構函式。

function person()

person.prototype.each = function() {};

var p = new person();

age屬性 和 each 方法,都是例項成員。

p.age;

p.each();

這個age屬性通過person來訪問 是訪問不到的。

onsole.log(person.age);

person.say = function() {};

靜態成員

console.log(person.name);

console.log(person.say);

為什麼建構函式訪問不到例項成員?因為建構函式作為乙個物件,它的原型鏈沒有這個屬性。

person -> function.prototype -> object.prototype -> null

function person()

}person.say = function()

例項成員和靜態成員那個用起來更容易?靜態成員使用起來更方便,因為例項成員要使用的時候需要先建立物件

如果靜態成員和例項成員都要實現同乙個功能,此時,給誰新增?此時,新增乙個靜態成員使用起來更加容易。

解決這個問題有三種方式:

1.實現兩份(例項成員新增乙個,靜態成員也新增乙個)

function person() {}

person.prototype.say = function() ;

person.say = function() ;

2.給靜態成員新增乙個,例項成員要用的話,直接呼叫靜態成員。(推薦使用)

function person() {}

// 新增乙個靜態方法

person.each = function(str) ;

person.prototype.each = function(str1) ;

var p = new person();

p.each("這是要列印的內容");

3.給例項成員新增乙個,靜態成員要用的話,直接呼叫例項成員。

function person() {}

person.prototype.say = function() ;

person.say = function() ;

person.say();

靜態成員與例項成員

1 從語義上講,靜態成員對類有意義,類和所有例項共享。例項成員對例項有意義,每個例項都有專屬於自己的。如何理解?舉例來說,person類的age應該是例項成員,每個person例項都有自己的age,而maxage 年齡的最大極限,比如說200歲 應該是靜態成員,因為maxage對於人類 包括所有人 ...

靜態成員與例項成員

1 類的成員分為靜態成員和例項成員。為什麼設計出靜態成員和例項成員?靜態成員對類以及類的所有例項有意義,例項成員對每個例項有意義。考慮,person類,有個age欄位和maxage欄位。每個person例項都有自己的age,但所有的person例項都有相同的maxage 最大年齡極限 因此,maxa...

例項成員和靜態成員

什麼是成員 建構函式中的屬性或方法稱為成員 建構函式中的成員分類 a 例項成員 在建構函式內部通過this關鍵字設定的屬性或方法 function fn uname b 例項成員如何訪問 通過例項物件點的方法訪問 通過建構函式建立的物件叫例項物件 let zs new fn 張三 console.l...