Javascript 面向对象(共有方法,私有方法,特权方法,静态属性和方法,静态类)示例讲解
一,私有属性和方法
私有方法:私有方法本身是可以访问类内部的所有属性(即私有属性和公有属性),但是私有方法是不可以在类的外部被调用。
<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 面向对象(共有方法,私有方法,特权方法,静态属性和方法,静态类)示例讲解的更多相关文章
- JS面向对象(3) -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...
- js面向对象之公有、私有、静态属性和方法详解
现下,javascript大行其道,对于网站开发人员来说,javascript是必需掌据的一门语言,但随着jquery等框架的流行和使用,许多人对于原生javascript缺乏深入的理解,习惯了函数式 ...
- JavaScript 公有 私有 静态属性和方法
1.公有属性和公有方法 这里的 name age 都是参数传递进去 可以在外面直接实例化调用. 2.私有属性和方法 私有的只能在函数内部使用 作用域的原因 3.静态属性和静态方法 这里我首先 创建 ...
- js公有、私有、静态属性和方法的区别
现下,javascript大行其道,对于网站开发人员来说,javascript是必需掌据的一门语言,但随着jquery等框架的流行和使用,许多人对于原生javascript缺乏深入的理解, ...
- PHP类知识----静态属性和方法
<?php class mycoach { public $name="陈培昌"; CONST hisage =; ; private $favorite = "喜 ...
- Vue2.0源码思维导图-------------Vue 构造函数、原型、静态属性和方法
已经用vue有一段时间了,最近花一些时间去阅读Vue源码,看源码的同时便于理解,会用工具画下结构图. 今天把最近看到总结的结构图分享出来.希望可以帮助和其他同学一起进步.当然里边可能存在一些疏漏的,或 ...
- javascript——对象的概念——函数 1 (函数对象的属性和方法)
一.创建函数 函数是一种对象:Function类 是对象,可以通过 Function 实例化一个函数,不过最多的还是利用 function 来创建函数. 方式一:利用 Function类 来实例化函数 ...
- javascript 构造函数类和原型 prototyp e定义的属性和方法的区别
1.把方法写在原型中比写在构造函数中消耗的内存更小,因为在内存中一个类的原型只有一个,写在原型中的行为可以被所有实例共享,实例化的时候并不会在实例的内存中再复制一份而写在类中的方法,实例化的时候会在每 ...
- 转: javascript动态添加、修改、删除对象的属性和方法
在其他语言中,对象一旦生成,就不可更改了,要为一个对象添加修改成员必须要在对应的类中修改,并重新实例化,而且程序必须经过重新编译.JavaScript 中却非如此,它提供了灵活的机制来修改对象的行为, ...
随机推荐
- 常用 Linux 命令的基本使用
常用 Linux 命令的基本使用 操作系统 作用:管理好硬件设备,让软件可以和硬件发生交互类型 桌面操作系统 Windows macos linux 服务器操作系统 linux Windows ser ...
- js继承之组合继承(结合原型链继承 和 借用构造函数继承)
在我的前两篇文章中,我们已经介绍了 js 中实现继承的两种模式:原型链继承和借用构造函数继承.这两种模式都存在各自的缺点,所以,我们考虑是否能将这二者结合到一起,从而发挥二者之长.即在继承过程中,既可 ...
- 使用Akka的远程调用
概述 正如其它RPC或者RMI框架那样,Akka也提供了远程调用的能力.服务端在监听的端口上接收客户端的调用.本文将在<Spring与Akka的集成>一文的基础上介绍Akka的remote ...
- 『动态』动态JSON万能转换函数 + .Net40 dynamic动态数据绑定
不废话,调用代码: static void Main(string[] args) { string json = File.ReadAllText("2.txt", Encodi ...
- 使用WebGL 自定义 3D 摄像头监控模型
前言 随着视频监控联网系统的不断普及和发展, 网络摄像机更多的应用于监控系统中,尤其是高清时代的来临,更加快了网络摄像机的发展和应用. 在监控摄像机数量的不断庞大的同时,在监控系统中面临着严峻的现状问 ...
- ASP.NET Core微服务实战系列
希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,码字辛苦,如果你吃了蛋觉得味道不错,希望点个赞,谢谢关注. 前言 这里记录的是个人奋斗和成长的地方,该篇只是一个系列目录和构想 ...
- 使用Ninject的一般步骤
以下为DI控制反转个人理解烦请各位大牛指教~ 编写程序时我们应当遵循抵耦合高内聚的原则(各个功能模块互不依赖). 我们可以利用面向对象里面接口的特性来进行DI控制反转,让功能模块全部依赖接口,而不依赖 ...
- Oracle AWR报告详细分析--比较详细
https://blog.csdn.net/demonson/article/details/79474133
- E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?
使用sudo apt-get install nginx 时提示错误: 问题描述: E: 无法获得锁 /: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占 ...
- 必看!如何让你的LBS服务性能提升十倍!
本文由云+社区发表 作者:腾讯云数据库团队 随着国内服务共享化的热潮普及,共享单车,共享雨伞,共享充电宝等各种服务如雨后春笋,随之而来的LBS服务定位问题成为了后端服务的一个挑战.MongoDB对LB ...