1、靜態類
無需實例化(即無需用new操作符實化對象)就可以調用的方法就叫靜態方法,
只包含靜態屬性和靜態方法的類叫靜態類,不能被實例化。
/*
* 靜態類:
* 無需實例化(即無需用new操作符實化對象)就可以調用的方法就叫靜態方法,
* 只包含靜態屬性和靜態方法的類叫靜態類,不能被實例化。
*/
//JavaScript對象靜態類示例
var jsStaticClass = {
staticAttribute_A: "靜態屬性A",
staticMethod_A: function () {
//靜態方法內部可以訪問靜態屬性
return "靜態方法A," + this.staticAttribute_A + "," + jsStaticClass.staticAttribute_A;
}
};
//靜態屬性和方法也可以在外部定義和訪問
jsStaticClass.staticAttribute_B = "靜態屬性B";
jsStaticClass.staticMethod_B = function () {
//靜態方法內部可以訪問靜態屬性
return "靜態方法B," + this.staticAttribute_A + "," + jsStaticClass.staticAttribute_B;
};
//無需實例化(即無需用new操作符實化對象)就可以調用的方法就叫靜態方法。
console.log(jsStaticClass.staticAttribute_A);
console.log(jsStaticClass.staticAttribute_B);
console.log(jsStaticClass.staticMethod_A());
console.log(jsStaticClass.staticMethod_B());
//var instance = new jsStaticClass(); //靜態類不能被實例化!
2、靜態屬性和方法
靜態屬性和方法:
無需實例化(即無需用new操作符實化對象)就可以調用的方法就叫靜態方法。
/*
* 靜態屬性和方法:
* 無需實例化(即無需用new操作符實化對象)就可以調用的方法就叫靜態方法。
*/
//JavaScript對象靜態屬性和方法示例
function JSClass() { };
JSClass.staticAttribute = "靜態屬性";
JSClass.staticMethod = function () {
return "靜態方法," + JSClass.staticAttribute;
};
//無需實例化(即無需用new操作符實化對象)就可以調用的方法就叫靜態方法。
console.log(JSClass.staticAttribute);
console.log(JSClass.staticMethod());
/*new一個實例*/
var instance = new JSClass();
//instance.staticAttribute; //錯誤!
//instance.staticMethod(); //錯誤!
console.dir(instance); //instance實例不可以訪問靜態屬性及方法
3、私有屬性和方法
私有方法:私有方法本身是可以訪問類內部的所有屬性(即私有屬性和公有屬性),但是私有方法是不可以在類的外部被調用。
/*
* 私有方法:私有方法本身是可以訪問類內部的所有屬性(即私有屬性和公有屬性),但是私有方法是不可以在類的外部被調用。
*/
//JavaScript對象私有屬性,私有方法示例
function JSClass() {
//私有變量只有在函數或者對象作用域範圍內能訪問
var privateAttribute = "私有屬性";
function privateMethod_A() {
console.log("私有方法A," + privateAttribute);
};
var privateMethod_B = function () {
console.log("私有方法B," + privateAttribute);
};
//私有方法可以在函數作用域範圍內使用。
privateMethod_A();
privateMethod_B();
/*
私有屬性和方法還有個特點:都不能用this訪問。
下面幾種是不行的:
this.privateAttribute;
this.privateMethod_A();
this.privateMethod_B();
*/
};
/*new一個實例*/
var instance = new JSClass();
console.dir(instance); //instance實例訪問不到私有屬性及私有方法
4、公有屬性和方法
公有方法:
1.公有方法是可以在類的外部被調用的,
2.但是它不可以訪問類的私有屬性。
3.公有方法必須在類的內部或者外部通過類的prototype屬性添加。
/*
* 公有方法:
* 1.公有方法是可以在類的外部被調用的;
* 2.但是它不可以訪問類的私有屬性;
* 3.公有方法必須在類的內部或者外部通過類的prototype屬性添加。
*/
//JavaScript對象公有屬性,公有方法示例
function JSClass() {
//公有變量在函數內或者實例都能訪問
this.publicAttribute = "公有屬性";
this.publicMethod_A = function () {
console.log("公有方法A," + this.publicAttribute);
};
//公有方法可以在類的內部添加
JSClass.prototype.publicMethod_B = function () {
console.log("公有方法B," + this.publicAttribute);
};
//公有方法可以在函數作用域範圍內使用,也可以在函索作用域範圍外使用,可以被實例調用和繼承
this.publicMethod_A();
this.publicMethod_B();
/*
公有屬性和方法有個特點:在內部訪問都必須用this訪問
下面幾種是不行的:
publicAttribute;
publicMethod_A();
publicMethod_B();
*/
};
//公有方法也可以在類的外部通過類的prototype屬性添加
JSClass.prototype.publicMethod_C = function () {
console.log("公有方法C," + this.publicAttribute);
};
/*new一個實例*/
var instance = new JSClass();
console.log("實例調用公有屬性:" + instance.publicAttribute);
console.log("實例調用公有方法:" + instance.publicMethod_A());
console.log("實例調用公有方法:" + instance.publicMethod_B());
console.dir(instance); //instance實例可以訪問公有屬性及方法
//但是,通過實例添加公有屬性是不行的
//instance.prototype.publicMethod_D = function () {
// console.log("公有方法D," + this.publicAttribute);
//};
5、特權方法
特權方法:
1.特權方法是可以在類的外部被調用的,
2.但是它可以訪問類的私有屬性,並且也是可以訪問類的公有屬性,可以勉強的認爲它是一種特殊的公有方法。
3.但是它與上面的公有方法的聲明與定義方式不同。特權方法必須在類的內部聲明定義。
/*
* 特權方法:
* 1.特權方法是可以在類的外部被調用的;
* 2.但是它可以訪問類的私有屬性,並且也是可以訪問類的公有屬性,可以勉強的認爲它是一種特殊的公有方法;
* 3.但是它與上面的公有方法的聲明與定義方式不同。特權方法必須在類的內部聲明定義。
*/
//JavaScript對象特權方法示例
function JSClass() {
//私有變量只有在函數或者對象作用域範圍內能訪問
var privateAttribute = "私有屬性";
//私有方法
function privateMethod() {
console.log("私有方法");
}
//通過使用this關鍵字定義一個特權方法
this.privilegeMethod = function () {
//在特權方法中可以訪問私有屬性和私有方法
console.log("特權方法," + privateAttribute + "," + privateMethod());
};
};
/*new一個實例*/
var instance = new JSClass();
console.log("實例調用特權方法:" + instance.privilegeMethod());
console.dir(instance); //instance實例可以訪問公有屬性及方法
/*
* 特權方法瀏覽器兼容支持性很差,避免使用!
*/
特權方法的調用規則
特權方法通過this調用公有方法、公有屬性,通過對象本身調用靜態方法和屬性,在方法體內直接調用私有屬性和私有方法。
公有方法:就是所有通過該類實例化出來的對象,共同都擁有或者說都可以使用的方法。一般把共用的方法,都放在“原型對象“當中,如果放在構造函數中,會重複創建共同的方法。
私有方法:不能在外部調用。
特權方法:利用的閉包原理,即通過作用域鏈,讓內部函數能夠訪問外部函數的變量對象(即該類的私有變量、私有方法)。