文档章节

Javascript的面相对象编程

k
 keepthinker
发布于 2016/06/09 18:23
字数 503
阅读 68
收藏 5
点赞 0
评论 0

对象生成

   1. 使用闭包方式模拟对象生成

// Use closure to simulate class
function CalculatorClosure (name){
	var id = 1;
	return {
		plus : function(a, b){
			return a + b;
		},
		minus : function(a, b){
			return a - b;
		},
		setName : function(_name){
			name = _name;
		},
		getName : function(){
			return name;
		},
		getId : function(){
			return id;
		}

	}
}

//Run the example:
var obj = CalculatorClosure("Name");
console.log(obj.getName());
console.log(obj.minus(2,6));

    代码中可以看到,是通过调用函数返回一个对象。该被返回的对象里有对应属性名的函数,这些函数类似于面向对象语言中pulic作用范围的函数。

    2. 一般生成对象

function CalculatorNormal (name){
	this.id = 2;
	var battery = 0.99;
	function getDisplayBattery(){
		return battery * 100 + "%";
	}
	this.plus = function(a, b){
		return a + b;
	}
	this.minus = function(a, b){
		return a - b;
	}
	this.setName = function(_name){
		name = _name;
	}
	this.getName = function(){
		return name;
	}
	this.getId = function(){
		return this.id;
	}
	this.getBattery = function(display = false){
		if(false == display){
			return battery;
		}else{
			return getDisplayBattery();
		}
	}
}
//Run example
var obj = new CalculatorNormal("Air");
console.log(obj.getBattery());
console.log(obj.getId());
console.log(obj.getBattery(true));

    这里凡是带this.的成员变量与函数都是public作用域,反之,则是private作用域。

    3. 通过prototype来实现对象的生成

// class implemented with prototype
function CalculatorPrototype (name){
	this.id = 2;
	this.name = name;
}
(function(){
	this.plus = function(a, b){
		return a + b;
	}
	this.minus = function(a, b){
		return a - b;
	}
	this.setName = function(_name){
		this.name = _name;
	}
	this.getName = function(){
		return this.name;
	}
	this.getId = function(){
		return id;
	}
}).call(CalculatorPrototype.prototype);

    因为每次new一个对象时,可以复用成员函数,这里建议采用prototype方式实现对象的生成,可以减少function建立的开销。

 

继承

// class inheritance
function Employee() {
	this.name = "";
	this.department = "general";
	this.sayHello = function(){
		return "Hello!";
	}
}

function Manager() {
	Employee.call(this);
	this.reports = ["a", "b", "c"];
}

Manager.prototype = Object.create(Employee.prototype);
Manager.prototype.constructor = Manager;

//Run example
var obj = new Manager();
console.log(obj.sayHello());
console.log(obj instanceof Manager);
console.log(obj instanceof Employee);

   以上的例子,采用this定义的成员作用域都为public, 反之,由于闭包特性,则为private作用域,可被所有该方法里所有成员可见,但对闭包外不可见。

 

    由于JS是一种灵活的语言,以上只是简要概述几种面向对象编程的实现方法。若要深入了解Javascript面相对象编程方法,可以访问https://developer.mozilla.org/en-US/docs/Web/JavaScript

 

© 著作权归作者所有

共有 人打赏支持
k
粉丝 3
博文 6
码字总数 5073
作品 0
深圳
程序员
一个javascript继承的基础类Base.js

一个javascript继承的基础类Base.js 官网:http://dean.edwards.name http://dean.edwards.name/weblog/2006/03/base/ 一个javascript继承的基础类 首先我是一个面向对象的程序员,并且javascr...

暗之幻影
2014/12/17
0
0
JavaScript入门(六)

对象 对象是我们使用JavaScript的核心。JavaScript中的对象在许多方面和编程外的现实世界中的对象是相似的(它并不存在,我只是做个设想)。在现实的世界中,一个对象就是一个“事物”(许多...

晨曦之光
2012/03/09
0
0
细说JavaScript数据类型及转换

细说JavaScript数据类型及转换 JavaScript数据类型 1.Boolean(布尔) 布尔:(值类型)var b1=true;//布尔类型 2.Number(数字) 数值:(值类型)var n1=3.1415926;//数值类型 n1.toFixed...

开元中国2015
2015/07/13
0
0
JavaScript中的this指针 理论化this指针的定义

JavaScript现在应用之广泛,远超其他任何语言,只要是一个合格的网站应用,基本上多多少少都会有JS的存在。在JavaScript中,this的指向被不少Coder所不解,但其实JS中的this理解起来也是相当...

superwebmaster
05/29
0
0
js面向对象的一些初级知识总结~~

javascript作为一门解释性脚本语言,有着其独特的魅力.既具有函数编程的特性,又具有面向对象的特征.以前的开发中,大多是使用了javascript的函数式编程,最近,发现其的面向对象也有一定的优势,...

乔康007
2013/02/24
0
0
关于Javascript技术体系

Javascript技术体系主要包含了五个方面的内容: Javascript核心语言定义:每一种编程语言都有自已的核心语法,包括数据类型,变量,常量,运算符,语句等。 原生对象和内置对象:为方便程序员...

倪九林
2014/09/15
0
0
如何轻松快速学习JavaScript 呢?

JS给人那种感觉的原因多半是因为它如下的特点: 1:本身知识很抽象、晦涩难懂,如:闭包、内置对象、DOM。 2:本身内容很多,如函数库,对象库就一大堆。 3:混合多种编程思想。 4:辛苦学习...

课工场CC老师
2017/11/04
0
0
三分钟读懂Java与JavaScript的区别,让小白摘帽

Java跟JavaScript虽然在名称上有些许相似,但其实是两种完全不同的语言。Java是一种程序设计语言,JavaScript是客户端的脚本语言,把这两样东西放在一起比较在科学上其实并不严谨。但它们唯一...

小欣妹妹
2017/10/21
0
0
[转贴]悟透JavaScript

看到一篇文章,写的还不错,可以参考: 引子 编程世界里只存在两种基本元素,一个是数据,一个是代码。编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力。 数据天生就是文静...

穿越星辰
2010/05/13
0
0
当javaScript从入门到提高前需要注意的细节:变量部分

到了HTML5的时代,对javaScript的要求不是降低了,而是更提高了。javaScript语言的入门非常简单,如果你有java、C#等C风 格的结构化语言的基础,那javaScript你最多半天就可以写点什么了。但...

晨曦之光
2012/02/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java基础——异常

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 异常处理: 可以挖很多个陷阱,但是不要都是一样...

凯哥学堂
21分钟前
0
0
180723-Quick-Task 动态脚本支持框架之结构设计篇

文章链接:https://liuyueyi.github.io/hexblog/2018/07/23/180723-Quick-Task-动态脚本支持框架之结构设计篇/ Quick-Task 动态脚本支持框架之结构设计篇 相关博文: 180702-QuickTask动态脚本...

小灰灰Blog
24分钟前
0
0
SBT 常用开发技巧

SBT 一直以来都是 Scala 开发者不可言说的痛,最主要的原因就是官方文档维护质量较差,没有经过系统的、循序渐进式的整理,导致初学者入门门槛较高。虽然也有其它构建工具可以选择(例如 Mill...

joymufeng
29分钟前
0
0
HBase in Practice - 性能、监控及问题解决

李钰(社区ID:Yu Li),阿里巴巴计算平台事业部高级技术专家,HBase开源社区PMC&committer。开源技术爱好者,主要关注分布式系统设计、大数据基础平台建设等领域。连续4年基于HBase/HDFS设计和...

中国HBase技术社区
30分钟前
1
0
ES18-JAVA API 批量操作

1.批量查询 Multi Get API public static void multiGet() {// 批量查询MultiGetResponse response = getClient().prepareMultiGet().add("my_person", "my_index", "1")// 查......

贾峰uk
34分钟前
0
0
SpringBoot2.0使用health

1,引入actuator <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency> 2,application.properties ......

暗中观察
41分钟前
0
0
阿里巴巴Java开发规约

###编程规约 命名风格 【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束 【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。...

简心
46分钟前
0
0
如何用TypeScript来创建一个简单的Web应用

转载地址 如何用TypeScript来创建一个简单的Web应用 安装TypeScript 获取TypeScript工具的方式: 通过npm(Node.js包管理器) npm install -g typescript 构建你的第一个TypeScript文件 创建...

durban
50分钟前
0
0
分享好友,朋友圈自定义分享链接无效

这个问题是微信6.5.6版本以后,修改了分享规则:分享的连接必须在公众号后台设定的js安全域名内

LM_Mike
今天
0
0
2018年7月23日课程

一、LVS-DR介绍 director分配请求到不同的real server。real server 处理请求后直接回应给用户,这样director负载均衡器仅处理客户机与服务器的一半连接。负载均衡器仅处理一半的连接,避免了...

人在艹木中
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部