Javascript 面向对象(共有方法,私有方法,特权方法,静态属性和方法,静态类)示例讲解
2017-04-19 18:40
666 查看
一,私有属性和方法
私有方法:私有方法本身是可以访问类内部的所有属性(即私有属性和公有属性),但是私有方法是不可以在类的外部被调用。<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属性添加。
<script> /* * 公有方法: * 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>
相关文章推荐
- Javascript的私有变量和方法、共有变量和方法以及特权方法、构造器、静态共有属性和静态共有方法
- JavaScript【面向对象】-静态方法-私有方法-公有方法-特权方法
- Javascript 面向对象(一)(共有方法,私有方法,特权方法)
- js面向对象之公有、私有 、静态方法和属性,以及特权方法
- javascript封装类的技巧:具有私有成员、私有方法、特权属性、特权方法、原型对象、静态成员,最重要的是不会失去封装的优点,并且不影响继承
- javaScript 中的私有,共有,特权属性和方法
- JavaScript面向对象-静态方法-私有方法-公有方法-特权方法
- JavaScript面向对象-静态方法-私有方法-公有方法-特权方法
- Javascript--面向对象(一)(共有方法,私有方法,特权方法)
- javaScript 中的私有,共有,特权属性和方法
- Javascript 面向对象(一)(共有方法,私有方法,特权方法)
- JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
- Javascript 构造函数,公有,私有特权和静态成员定义方法
- js面向对象之公有、私有、静态属性和方法详解
- JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
- js面向对象之公有、私有、静态属性和方法详解
- javascript 原型方法,对象方法,类方法;私有属性,公有属性,公有静态属性
- JS类定义:涵盖了javascript公有成员定义、私有成员定义、特权方法定义的简单示例
- JavaScript面向对象-静态方法-私有…
- 从声明方式看Javascript的4种方法的区别-公有方法、私有方法、特权方法和静态方法