靜態成員與例項成員
成員:屬性和方法。
例項:由建構函式建立出來的物件。
靜態成員:和建構函式相關的屬性和方法。
例項成員:由建構函式建立出來的物件的屬性和方法。
靜態成員與建構函式有關,例項成員與例項有關。
靜態成員和例項成員一般情況下是不能直接相互訪問的,即:例項(物件)是無法直接訪問靜態成員的;反之也是同樣道理。
例項為什麼訪問不到靜態成員?例項遵循屬性搜尋原則,只看物件本身以及物件的原型鏈,原型鏈中沒有建構函式。
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...