javascript面向对象的写法02
面向对象特性的初步实现
1.封装 利用作用域封装变量
作用域的概念是一样的,for语句,if语句等这些作用域内定义的变量只能作用域内访问,函数内定义的变量只能函数内访问。
function ClassA() {
var a = 1;
}
var b = a; //无法访问。
var obj = new ClassA();
var c = obj.a; //new出一个对象也无法访问。
但是函数内部是可以访问到的
function ClassA() {
var a = 1;
var b = a; //内部可以访问
function func1() {
a = 100;
return a; //函数内部都可以访问,内部函数也能访问外函数的变量;
}
}
因为内部可访问,外部不可访问。则可以模拟面向对象的私有属性。在函数内部使用var关键字定义变量就可以了。
function ClassA() { var a = 1; //私有属性 private
this.b = 100; //公共属性 public
}
内部使用var 和使用 this的区别。
this是个指向函数或对象自身的引用。上例中如下写法是一样的作用。
function ClassA() {
this.b = 1;
}
var obj = new ClassA(); //函数可看出构造方法,构造过程this.b = 1这条语句已经执行 //替换写法
function ClassA() {
}
var obj = new ClassA{};
obj.b = 1; //构造函数为空,于是外面补上设置属性值语句。 alert(obj.b); //此种写法obj.b这个属性变量自然是可以访问到的。
var只是简单的变量定义,上例中只是在函数内部定义了一个变量而已。
//本例中只是在两个不同的作用域空间定义了两个不同变量而已。没有任何关于对象引用的问题。
function ClassA() {
var a = 1;
}
var a = 100;
如何使用私有变量和公共变量
function ClassA() {
var a = 100;
this.b = 200;
this.func1 = function() {
return a + this.b; //正确用法
};
this.func2 = function() {
return a + b; //错误用法,this.b != b, 一个是对象的属性,一个是简单变量
};
this.func3 = function() {
return this.a + b; //错误用法,a只是一个简单变量
};
}
公共方法,私有方法
function ClassA() {
var func1 = function(){}; //私有方法
this.func2 = function(){}; //公共方法
}
内部使用的时候同样是公共的加this,私有方法不加this直接当普通函数使用。
function ClassB() {
var func1 = function(){}; this.func2 = function(){}; this.func3 = function() {
func1();
this.func2();
};
}
注意,同其他语言不通私有方法不能访问公共方法和公共变量。因为私有方法本质上只是个普通的方法,只是他定义在函数对象内部而已。除了位置在函数对象内部外,其他跟函数对象没任何关联。
function ClassA() { this.a = 100; var func1 = function(){
alert(this.a); //不能访问,此时this指的是func1这个普通函数对象
this.func2(); //不能访问,此时this指的是func1这个普通函数对象
};
this.func2 = function(){};
}
不管公共方法还是私有方法都只能在函数内部访问私有变量和私有方法。
function ClassB() { var a = 100; var func1 = function(){
alert(a);
}; this.func2 = function() {
func1(); //正常访问
return a; //正常访问
};
} var obj = new ClassB();
alert(obj.a); //无法访问
obj.func1(); //无法访问
function ClassA() { var a = 100; //私有成员属性
this.getA = function(){ //公共get方法
return a;
};
this.setA = function(value){ //公共set方法
return a = value;
};
} var obj = new ClassA();
alert(obj.getA());
obj.setA(500);
公共方法,因为其定义在函数内部,函数内部定义的变量是可以访问到的。因为其本身是公共方法,可以被外部访问,这样便可以做到外部代码通过公共方法访问私有成员变量。
function ClassA() { this._a = 100; //文档化的私有成员属性
} var obj = new ClassA();
obj._a = 100; //看到下划线前缀的变量,这样的操作是不应该的。
javascript面向对象的写法02的更多相关文章
- javascript面向对象的写法03
javascript面向对象的写法03 js一些基础知识的说明 prototype 首先每个js函数(类)都有一个prototype的属性,函数是类.注意类有prototype,而普通对象没有. js ...
- javascript面向对象的写法及jQuery面向对象的写法
文章由来:jQuery源码学习时的总结 在JS中,一般的面向对象的写法如下: function Cao(){}//定义一个构造函数 Cao.prototype.init = function(){}/ ...
- javascript面向对象的写法01
类和对象 其他面向对象的语言类的语法是内置的,自然而然的事.javascript中有对象,但没有类的语法,类的实现需要模拟出来. 只需要把对象想成一个容器,里面存放一些属性或方法,把类想象成一个对象的 ...
- [js高手之路] javascript面向对象写法与应用
一.什么是对象? 对象是n个属性和方法组成的集合,如js内置的document, Date, Regexp, Math等等 document就是有很多的属性和方法, 如:getElementById, ...
- 浅谈javascript面向对象
我们常用的两种编程模式 POP--面向过程编程(Process-oriented programming) 面向过程编程是以功能为中心来进行思考和组织的一种编程方法,它强调的是系统的数据被加工和处理的 ...
- Javascript面向对象(封装、继承)
Javascript 面向对象编程(一):封装 作者:阮一峰 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程( ...
- javascript面向对象(一):封装
本文来自阮一峰 学习Javascript,最难的地方是什么? 我觉得,Object(对象)最难.因为Javascript的Object模型很独特,和其他语言都不一样,初学者不容易掌握. 下面就是我的学 ...
- JavaScript面向对象,及面向对象的特点,和如何构造函数
1.面向对象和面向过程的区别 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了: 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是 ...
- JavaScript面向对象简介
JavaScript面向对象简介 @(编程) [TOC] 1. 命名空间 命名空间是一个容器,它允许开发人员在一个独特的,特定于应用程序的名称下捆绑所有的功能. 在JavaScript中,命名空间只是 ...
随机推荐
- vue-cli项目启动遇到的坑
利用 npm init webpack projectname 之后 切换到项目所在文件夹下,执行命令 npm install ,一直非常慢,卡在那里基本不动. 最后是利用cnpm 安装成功的. 转载 ...
- Win32创建异形窗口
大家都见过在windows下各种气泡窗口.输入法窗口以及其他一些窗口,这些窗口看起来不像传统的windows窗那样,上面是标题栏,下面是窗口的客户区.这些窗口形状各异,可以是一个多边形,一幅图,甚至是 ...
- jconsole 和jvisualVM 监控远程 spring boot程序
监控java 程序 增加启动参数 java \ -Djava.rmi.server.hostname=192.168.2.39 \ -Dcom.sun.management.jmxremote \- ...
- SQL数据库正在恢复 查看进度
在使用SQL的过程中.. 开启一个事务..进行大计算量..在中间出错或者强制杀死SQL服务进程..总之事务没有提交.. 再次开启时sql会进入自动检查的过程.. 数据库小的话问题不大..会比较快.. ...
- fix the issue that disk space is not the size that aws ec2 have.
在申请aws ec2时,按照向导,在选择存储的时候默认硬盘大小是 8 G,这时候可以根据自己的需要输入一个合适的数字,例如100.完成向导并启动ec2 instance 后登陆机器.使用命令: df ...
- Zookeeper概念学习系列之paxos协议
不多说,直接上干货! 前言 一种最终一致的算法,paxos算法. paxos算法是由大牛lamport发明的,关于paxos算法有很多趣事.比如lamport论文最初由故事描述来引入算法,以至于那班习 ...
- Request笔记
1 Request 的简介和运行环境 1.HttpServletRequest 概述 我们在创建 Servlet 时会覆盖 service()方法,或 doGet()/doPost(),这些方法都有两 ...
- 截取字符串-【.net】
问题: 如: asdasdfasdf asdfasdf 12sdfsdf asdfa 截取后为: asdasdfasdf asdfasdf 12sdfsdf 为第一段asdfa 为第二段 解答: Di ...
- 【Css】Layout布局(二)
css定位(Positioning) 所谓定位,即允许你定义元素框相对于其正常位置应该出现的位置,或者相对于父元素.另一个元素甚至浏览器窗口本身的位置. css提供了三种基本的定位机制:普通流.浮动和 ...
- Java调用打印机打印指定路径图片
依赖 javax.print package com.xgt.util; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; ...