JS OOP -04 JS中的公有成员,私有成员和静态成员
JS中的公有成员,私有成员和静态成员
a.实现类的公有成员
b.实现类的私有成员
c.实现类的静态成员
a.实现类的公有成员
之前定义的任何类型成员都属于公有成员的范畴,该类的任何实例都对外公开这些属性和方法.
注意在JS中,其实没有私有的概念~
b.实现类的私有成员
//私有成员
/*
* 私有成员即在类的内部实现中可以共享的成员,不对外公开.
* JS中并没有特殊的机制来定义私有成员,但可以用一些技巧来实现这个功能.
*/ /*
* 这个技巧主要是通过变量的作用域性质来实现的,在JS中,一个函数内部定义的变量称为局部变量,
* 该变量不能够被此函数外的程序所访问,却可以被函数内部定义的嵌套函数所访问.
* 在实现私有成员的过程中,正是利用了这一性质.
* 在前面提到,在类的构造函数中可以为类添加成员,通过这种方式定义的类成员,实际上共享了在构造函数内部定义的局部变量,
* 这些变量就可以看作类的私有成员.
*/
function class1(){ var pp='this is a private property';//私有属性成员pp function pm(){//私有方法成员pm,显示pp的值
alert(pp);
}; this.Method1=function(){//在公有成员中改变私有属性的值
pp='pp has been changed';
}; this.Method2=function(){//在公有成员中调用私有方法
pm();
};
}; var obj1= new class1(); obj1.Method1();
obj1.Method2(); alert(obj1.pp);//undefined 访问不到
alert(obj1.pm);//undefined 访问不到
//***var __age =10; 一般这样定义私有变量名,包括私有的方法
c.实现类的静态成员
//静态成员
/*
* 静态成员属于一个类的成员,它可以通过"类名.静态成员名"的方式访问.
* 在JS中,可以给一个函数对象直接添加成员来实现静态成员,因为函数也是一个对象,所以对象的相关操作,对函数同样适用.
* 在JS中,不能用静态成员访问实例成员,也不能用实例成员访问静态成员,两者是不相通的.
*/
function class2(){//构造函数 };
class2.staticProperty='sample';//静态属性
class2.staticMethod=function(){//静态方法
alert(class2.staticProperty);
};
class2.staticMethod();
/*
* 类class1添加了一个静态属性和静态方法,并且在静态方法中引用了该类的静态属性.
* 如果要给每个函数对象都添加通用的静态方法,还可以通过函数对象所对应的类Function来实现
*/
//给类Function添加原型方法:showArgsCount!
Function.prototype.showArgsCount=function(){//定义靠前
alert(this.length);
}
function class3(a){ }
class3.showArgsCount(); /*
* 以上,通过Function的prototype原型对象,可以给任何函数都加上通用的静态成员,这在实际开发中可以起到很大的作用.
*
*/
/*prototype.js框架*/
Function.prototype.bind=function(object){
var _method=this;
return function(){
_method.apply(object,arguments);
};
}; Function.prototype.bindAsEventListener=function(object){
var _method=this;
return function(event){
_method.call(object,event || window.event);
};
};
JS OOP -04 JS中的公有成员,私有成员和静态成员的更多相关文章
- Python进阶----类的结构(公有成员 , 私有成员(私有属性,私有方法),类方法,静态方法,属性) ,isinstance 和issubcalss ,元类(type())
Python进阶----类的结构(公有成员 , 私有成员(私有属性,私有方法),类方法,静态方法,属性) ,isinstance 和issubcalss ,元类(type()) 一丶类的结构细分 ...
- js 独立命名空间,私有成员和静态成员
独立的命名空间 1可以避免全局变量污染. 全局变量污染不是 说 被全局变量污染,而是说不会污染全局变量. 2实现私有成员. 在js中函数 就可以满足独立的命名空间的两点需求. 如: ...
- 精读JavaScript模式(七),命名空间模式,私有成员与静态成员
一.前言 惰性十足,这篇2月19号就开始写了,拖到了现在,就是不愿意花时间把看过的东西整理一下,其它的任何事都比写博客要有吸引力,我要反省自己. 从这篇开始,是关于JS对象创建模式的探讨,JS语言简单 ...
- JS OOP -03 JS类的实现
JS类的实现: a.理解类的实现机制 b.使用prototype对象定义类成员 c.一种JS类的设计模式 a.理解类的实现机制 在JS中可以使用function关键字来定义一个类. 添加类的成员,在函 ...
- JS OOP 概述
JS面向对象,大致内容 1.面向对象的基础 2.深入认识JS的函数 3.JS类的实现 4JS中共有成员,私有成员和静态成员 5.JS的反射 6.JS的继承 7.JS实现抽象类 8.JS事件设计模式 9 ...
- JS 的私有成员为什么钦定了 #?
翻译自 tc39/proposal-class-fields 译者按:社区一直以来有一个声音,就是反对使用 # 声明私有成员.但是很多质疑的声音过于浅薄.人云亦云.其实 TC39 早就对此类呼声做过回 ...
- 『无为则无心』Python面向对象 — 55、多层继承和继承中的私有成员
目录 1.Python支持多层继承 (1)多层继承实现 (2)多层继承和多重继承区别 2.继承中的私有成员 (1)继承中父类私有属性和私有方法 (2)获取和修改私有属性值 1.Python支持多层继承 ...
- js两种生成对象模式(公有成员和成员私有)
假设有个需求,创建一个book类,有isbn码,书名,作者 :可以对isbn进行数据完整性校验:--js设计模式 <script type="text/javascript" ...
- js oop中的三种继承方法
JS OOP 中的三种继承方法: 很多读者关于js opp的继承比较模糊,本文总结了oop中的三种继承方法,以助于读者进行区分. <继承使用一个子类继承另一个父类,子类可以自动拥有父类的属性和方 ...
随机推荐
- vue---vue2.x自定义plugin,给vue添加全局方法,原型上增加全局方法
1. 自定义plugin.js export default{ install(Vue,options); { Vue.prototype.toStringTwo=(str)=>( ('0000 ...
- js往标签下插入标签的方法
js="document.getElementsByClassName('CodeMirror-line')[0].innerHTML = 'xxxxxx'"dr.execute_ ...
- PPT做交互效果
1 做交互效果(点击一个按钮,弹出某个框或者跳转到某个页面)其实就是若干个PPT页面,利用给按钮增加超链接或者动作 达到点击一个按钮 跳转到另外一个PPT的效果. 2 选择一个形状组件(或者其他组件) ...
- Delphi ADOQuery的速度优化
今天终于把纠缠了几天的问题改完了,说到底只是一个很小的问题,就是ADOQuery的一个小属性. 把控件DBGridEh的一列的checkbox设为true,将其绑定DataSource和ADOQuer ...
- cursor -- 定义鼠标样式
cursor -- 定义鼠标样式 取值: [ [<uri> ,]* [ auto | crosshair | default | pointer | move | e-resize | n ...
- 网页布局(html+css基础)
一.如何用CSS进行网页布局 二.网页布局基础 三.网页简单布局之结构和表现原则 四.CSS Sprite雪碧图应用 什么叫布局? 网页的特点: 网页自适应宽度: 网页长度无限延长: (分栏也叫分列, ...
- 【C/C++开发】C++实现简单的线程池
C++实现简单的线程池 线程池编程简介: 在我们的服务端的程序中运用了大量关于池的概念,线程池.连接池.内存池.对象池等等.使用池的概念后可以高效利用服务器端的资源,比如没有大量的线程在系统中进行上下 ...
- .Net中委托的协变和逆变详解
关于协变和逆变要从面向对象继承说起.继承关系是指子类和父类之间的关系:子类从父类继承所以子类的实例也就是父类的实例.比如说Animal是父类,Dog是从Animal继承的子类:如果一个对象的类型是Do ...
- 最新 东方财富java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.东方财富等10家互联网公司的校招Offer,因为某些自身原因最终选择了东方财富.6.7月主要是做系统复习.项目复盘.Leet ...
- JavaScript中的Truthy和Falsy
JavaScript中存在Truthy值和Falsy值的概念 — 除了boolean值true.false外,所有类型的JavaScript值均可用于逻辑判断,其规则如下: 1.所有的Falsy值,当 ...