文档章节

Javascript的面相对象编程

k
 keepthinker
发布于 2016/06/09 18:23
字数 503
阅读 73
收藏 5

对象生成

   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
关于前端的一个问题,一直迷惑不解

开源中国很多的jquery插件非常好用,为什么会出现antdesign这些框架,是炫耀技术吗? 1.使用这类框架还要typescript编译,下载一堆工具,像是做后端开发一样,不麻烦吗,页面不就是html,css为...

myexam123
2017/05/24
1K
16
javascript入门经典【推荐】—新手必备、零基础学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a125138/article/details/7819466 本书目录 第一章: JavaScript语言基础第二章: JavaScript内置对象 第三章...

续写经典
2012/08/01
0
0
JavaScript中的this指针 理论化this指针的定义

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

superwebmaster
2018/05/29
0
0
分享51本关于JavaScript方面的学习书籍(免费下载)

分享51本关于JavaScript方面的学习书籍(免费下载) 1、JavaScript面向对象15分钟教程 2、原型、作用域、闭包的完整解释 3、Javascript面向对象特性实现(封装、继承、接口) 4、JavaScript面向...

邓剑彬
2012/12/02
1K
12

没有更多内容

加载失败,请刷新页面

加载更多

LIst的逆向遍历

public class list_demo { public static void main(String[] args) {// TODO Auto-generated method stub List list=new ArrayList<>(); list.add("a"); list.add("b");......

南桥北木
48分钟前
3
0
Linux下端口转发工具rinetd介绍

linux下简单好用的工具rinetd,实现端口映射/转发/重定向,针对TCP协议,不支持UDP。 官网地址 http://www.boutell.com/rinetd 里面介绍及使用齐全。 使用场景举例: 阿里云内网Redis连接问题...

ouhoo
今天
5
0
Oracle学习日志-5(算数运算符,比较运算符和逻辑运算符)

因为有编程基础,所以对于这一章还是很好理解,只需要注意对NULL的运算。 操作的表格 算数运算符 查询商品名字和商品售价,并商品售价乘2 SELECT product_name,sale_price * 2 AS "sale_pri...

白话
今天
3
0
搜索引擎(Lucene介绍、分词器详解)

Lucene介绍 Lucene简介 最受欢迎的java开源全文搜索引擎开发工具包。提供了完整的查询引擎和索引引擎,部分文本分词引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简...

这很耳东先生
今天
5
0
quartz详细介绍

quartz常用api Scheduler 调度程序交互的主要API。 Job 希望由调度程序执行的组件实现的接口。 JobDetail 用于定义作业的实例。 JobDataMap 可以包含不限量的序列化数据,在job运行的时候可以...

大笨象会跳舞吧
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部