`
247687009
  • 浏览: 171950 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

(二)javascript的封装(闭包)

阅读更多
封装和信息隐藏直接的关系应该算是同一个意思不同的表述方式吧,在java中使用private来实现一个变量某一个method只能在内部使用,在javasciprt中并没有该关键字,只能使用另一个概念,闭包来实现,说闭包之前先说一下javascript的三种创建对象的方式。
如有一下java代码:
public class User{
private String id;
private String name;
//get set 
}
创建一个User对象
User u = new User("1","小明");

使用javascript创建一个User对象第一种方式,名其名曰门户大开型,最简单,最直接的一种方式,只提供公共的变量
var User = function(id,name){
 this.id=id;
 this.name=name;
}
//创建一个User对象
var User = new User('1','小明');

第二种方式,命名规范区别私有成员,即提供get set 私有变量通过_开头
var User = function(id,name){
	this.setId(id);
	this.setName(name);
}
User.prototype={
	setId : function(id){
		this._id=id
	},
	getId : function{
		return this._id;
	},
	getName : function(){
		return this._name;
	},
	setName:function(name){
		this._name=name;
	}
}
//创建一个User对象
var User = new User('1','小明');

以上两种方式其实差不多的,都存在一个问题就是可以直接通过对象点属性的方式改变属性的值,其实并没有完成私有化变量
下面讲解第三中方式通过闭包的方式
var User = function(id,name){
	//直接声明两个变量,这两个变量的作用域只是在这个函数体之中所以外界是不能访问的
	var _id,_name;
	this.setId = function(id){
		_id=id
	},
	this.getId = function(){
		return _id;
	},
	this.getName = function(){
		return _name;
	},
	this.setName=function(name){
		_name=name;
	}
	this.setId(id);
	this.setName(name);
}

发现没有?这种方式外界就无法直接通过对象点属性的方式修改了
静态函数的创建,其实也和闭包相关的只需要将第三种方式进行改写
var User = (function(id,name){
		
		//此处的方法只会存在一个,无论你创建多少个User 
                //private方法 外界无法访问
		function show(){
			//...
		}


	return function(id,name){
		//私有属性
		var _id,_name;
	this.setId = function(id){
		_id=id
	},
	this.getId = function(){
		return _id;
	},
	this.getName = function(){
		return _name;
	},
	this.setName=function(name){
		_name=name;
	}
	this.setId(id);
	this.setName(name);
	}
})();
分享到:
评论

相关推荐

    Web前端面试题目JavaScript(作用域,原型。原型链,闭包,封装函数).txt

    前端面试题,包含JavaScript的闭包,作用域,原型,原型链,上下文环境以及DOM,BOM封装函数深度克隆,以及一些常见的·JS问题,试题简单但是容易混淆,作为前端工程师必考题

    JavaScript核心(对象、原型、继承、上下文、闭包、this).pdf

    面向对象概念(对象封装,各种继承,闭包原理,this作用域等)介绍清晰易懂

    layer.rar 使用js 闭包封装的原生提示模态框

    该工具类为一个使用js 闭包封装的一个提示模态框,使用于不同分辨率的设备包括pc

    JavaScript的模块化:封装(闭包),继承(原型) 介绍

    在复杂的逻辑下, JavaScript 需要被模块化,模块需要封装起来,只留下供外界调用的接口。闭包是 JavaScript 中实现模块封装的关键,也是很多初学者难以理解的要点

    详谈JavaScript的闭包及应用

    闭包的真正好处我个人认为除了封装还是封装,能带个我们私有方法,和调用上的灵活方便,也会使你的代码对外的对象保持干净整洁。 进入正题 维基百科这样定义了JS闭包:在计算机科学中,闭包(英语:Closure),又称...

    JavaScript代码+注释(初学者的入门到提高宝典)

    '9-JavaScript数据封装.html', '10-基于原型实现类的继承.html', '11-基于Object.create实现类的继承.html', '12-JavaScript代码容器.html', '13-网页开发布局利器bootstrap.html', '14-Jquery基础.html', '...

    JavaScript闭包和回调详解

     闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 闭包有三个特性: 1.函数嵌套函数; 2.函数内部可以引用外部的参数和变量; 3.参数和变量不会被垃圾回收机制回收。  ...

    JavaScript 闭包在封装函数时的简单分析

    wbkt2t最近发现了一个新名词:闭包。(自己落后了,要好好学习才行),baidu、google看了一下原理和实例,也明白了闭包的强大。JQuery也把闭包发扬光大了,网上一些个人开发的框架都是用了闭包了功能。知道了闭包的...

    根据一段代码浅谈Javascript闭包

    } 这里的闭包是f1,封闭了一个变量n和一个函数f2。 我们先无视nAdd,尽量保持原貌重写一下这个函数。 代码如下: function f1(){ var n = 999; var f2 = function(){ alert(n); }; return f2; } var result ...

    Javascript闭包用法实例分析

    本文实例分析了Javascript闭包的概念及用法。分享给大家供大家参考。具体如下: 提到闭包,想必大家都早有耳闻,下面说下我的简单理解。 说实话平时工作中实际手动写闭包的场景并不多,但是项目中用到的第三方框架和...

    详解JavaScript的闭包、IIFE、apply、函数与对象

    二、对象 2.1、对象常量(字面量) 2.2、取值 2.3、枚举(遍历) 2.4、更新与添加 2.5、对象的原型 2.6、删除 2.7、封装 三、函数 3.1、参数对象 (arguments) 3.2、构造函数 3.3、函数调用 3.3.1、call 3.3.2、...

    javaScript封装的各种写法

     通常写js组件开发的,都会用到匿名函数的写法去封装一个对象,与外界形成一个闭包的作用域。(这里对于js的继承,多态,我就不多说了,高级程序员应该具备这些知识,如果您也做过java开发,这个概念太熟悉了。) ...

    JavaScript自执行闭包的小例子

    代码如下: //无参数的 (function(){ alert(‘hello’); })();...一眼望去就是括号围着,局部变量想跑也不出来到处捣乱,这是其中一个主要用途,当然了,封装一些javascript库也离不开它。

    javascript核心基础

    详细介绍的javascript的核心技术:如javascript的对象编程 闭包 封装 继承 类的多种写法

    理解javascript封装

    我们可以使用闭包的概念来创建只允许从对象内部访问的方法和属性,来达到封装的要求。 基本方式 一般来说,我们学用的有三种方法来达到封装的目的。 使用this.XXX来声明一个变量,然后再声明getXXX、setXXX等取值、...

    javascript.base

    javascript基础语句、函数基础、对象、继承、封装、闭包

    JavaScript面向对象程序设计

    JavaScript面向对象程序设计(1): 前言 JavaScript面向对象程序设计(2): 数组 JavaScript面向对象程序设计(3): 对象...JavaScript面向对象程序设计(7): 闭包 JavaScript面向对象程序设计(8): 优雅的封装还是执行的效率?

    JavaScript 对Cookie 操作的封装小结

    Javascript 没有 private , public 访问权限设置的关键字,但是可以通过一定的技巧来模拟出相同的结果. 首先我们来看下面一行代码: var i = (1, 2, 3, 4, 5); 变量 i 最后的结果为 5. 这是逗号操作符的结果,也就是说...

Global site tag (gtag.js) - Google Analytics