欢迎光临企业官网建站网站平台,高端网站建设,网站建设公司网站

企业官网建站系统平台

网站建设,建站公司网站,网站建站教程,门户网站

Javascript 面向对象(共有方法,私有方法,特权方法,静态属性和方法,静态类)示例讲解

作者:jcmp      发布时间:2021-04-12      浏览量:0
一,私有属性和方法 私有方法

一,私有属性和方法

私有方法:私有方法本身是可以访问类内部的所有属性(即私有属性和公有属性),但是私有方法是不可以在类的外部被调用。

<script>

/*

* 私有方法:私有方法本身是可以访问类内部的所有属性(即私有属性和公有属性),但是私有方法是不可以在类的外部被调用。

*/

//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实例访问不到私有属性及私有方法

</script>

说明:类的构造函数里定义的function,即为私有方法;而在构造函数里用var声明的变量,也相当于是私有变量。(不过类比于c#这类强类型语言中的私有成员概念还是有区别的,比如无法在非构造函数以外的其它方法中调用) 。

私有方法

对象的私有方法和属性,外部是不可以访问的,在方法的内部不是能this调用对象的公有方法、公有属性、特权方法的。

二,公有属性和方法

公有方法:

1.公有方法是可以在类的外部被调用的,

2.但是它不可以访问类的私有属性。

3.公有方法必须在类的内部或者外部通过类的prototype属性添加。

<spcript>

/*

* 公有方法:

* 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);

//};

</script>

公有方法的调用规则

调用公有方法,我们必需先实例化对象

公有方法中通过不this调用公有属性和特权方法,不能使用this调用静态方法和属性,必需裁通过对象本身调用,即对象名。公有方法也不能调用私有方法。

三,特权方法

特权方法:

1.特权方法是可以在类的外部被调用的,

2.但是它可以访问类的私有属性,并且也是可以访问类的公有属性,可以勉强的认为它是一种特殊的公有方法。

3.但是它与上面的公有方法的声明与定义方式不同。特权方法必须在类的内部声明定义。

<script>

/*

* 特权方法:

* 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实例可以访问公有属性及方法

/*

* 特权方法浏览器兼容支持性很差,避免使用!

*/

</script>

特权方法的调用规则

特权方法通过this调用公有方法、公有属性,通过对象本身调用静态方法和属性,在方法体内直接调用私有属性和私有方法。

公有方法:就是所有通过该类实例化出来的对象,共同都拥有或者说都可以使用的方法。一般把共用的方法,都放在“原型对象“当中,如果放在构造函数中,会重复创建共同的方法。

私有方法:不能在外部调用。

特权方法:利用的闭包原理,即通过作用域链,让内部函数能够访问外部函数的变量对象(即该类的私有变量、私有方法)。

四,静态属性和方法

静态属性和方法:

无需实例化(即无需用new操作符实化对象)就可以调用的方法就叫静态方法。

<script>

/*

* 静态属性和方法:

* 无需实例化(即无需用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实例不可以访问静态属性及方法

</script>

静态方法的调用规则

使用静态方法时,无需实例化对象,便可以调用,对象实例不能调用对象的静态方法,只能调用实例自身的静态属性和方法。

五,静态类

静态类:

无需实例化(即无需用new操作符实化对象)就可以调用的方法就叫静态方法,

只包含静态属性和静态方法的类叫静态类,不能被实例化。

<script>

/*

* 静态类:

* 无需实例化(即无需用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(); //静态类不能被实例化!

</script>