JavaScript物件導向-- 如何在類別中區分公開方法、屬性 & 私有函式、變數

之前曾說過:

方法 = 函式, 只是方法依附在某物件底下存在

屬性 = 變數, 只是屬性依附在某物件底下存在

(函式,和變數是男女朋友; 而方法和屬性是老公老婆, 人的本質不變)


因而,

能被外部使用稱為"公開方法" 、"公開屬性":
        類別中的this可以指向"某實體呼叫這個方法所在當下的物件"。可被各個實體化後的物件使用
       
只供內部使用稱為"私有函式"、 "私有變數":
        不屬於任何物件, 指向window, 因而當放在某個function內部, 會成為只能被內部使用。


e.g.

function CreatePerson(name, sex, year) {

this.name = name;                                  // 公開屬性
this.sex = sex;                                        //  公開屬性

function _caclAge(y) {                              // 私有函式
var today = new Date();
return today.getFullYear() - y;
}

var _age = _caclAge(year);                        // 私有變數。變數被儲存了,形成閉包(closure)
this.showAge = function() {                    // 公開方法。這個方法會寫在類別中是因age                                                                                         是私有變數, 若以原型新增方法, 會參照不到此變數
console.log("my age: " + _age);
};

}

CreatePerson.prototype.showName = function() {
console.log("my name: " + this.name);
};

CreatePerson.prototype.showSex = function() {
console.log("my sex: " + this.sex);
};

var p1 = new CreatePerson("Mark", "man", 1985);
var p2 = new CreatePerson("Jack", "man", 1978);

console.log(p1.showAge());                           // my age: 31, 因公開方法可被外部使用
console.log(p1.age);                                      // undefined, 因私有函式不能被外部使用




留言

熱門文章