zoukankan      html  css  js  c++  java
  • javascript学习(8)——[知识储备]封装

    既然说到javascript的面向对象编程,那么我们也该说一下javascript中封装的实现。

    javascript中封装的实现也有以下几种实现方式:

    (1)门户大开类型

    (2)用命名规范区别私有和共有的方式

    (3)闭包

    下面,我们就一一展开介绍:

    (1)门户大开类型

    /**
     * 信息的隐藏是最终的目的,封装只不过是隐藏的一种方法
     */
    (function() {
    	/**
    	 * 1.门户大开类型 2.用命名规范区别私有和共有的方式 3.闭包
    	 */
    	// 门户大开型
    	function Person(age, name) {
    		this.name = name;
    		if (!this.checkAge(age)) {
    			throw new Error("年龄必须在0到150之间");
    		}
    		this.age = age;
    	}
    	// var p = new Person(-10,"JIM");
    	// alert(p.age)
    	// 解决上述问题
    	Person.prototype = {
    		checkAge : function(age) {
    			if (age > 0 && age < 150) {
    				return true;
    			} else {
    				return false;
    			}
    		}
    	}
    	Person.prototype["getName"] = function() {
    		return this.name || "Hello.js";
    	}
    	// var p = new Person(-10,"JIM");
    	var p = new Person(27, "JIM");
    	var p2 = new Person(27);
    	alert(p2.getName());
    })()

    这段代码是我从网上copy的,我个人并不是很觉得这可以作为一种封装的方式,

    第一点:我觉得有些拼凑的嫌疑,而且没有什么规范性可言

    第二点:不是很常用,大家看看知道就行了,完全没有必要记住

    (2)用命名规范来区别私有和共有变量

    (function(){
    	//用命名规范来区别私有和共有变量
    	function Person(name,age,email){
    		//定义私有变量
    		this._name;//私有
    		this._age;//私有
    		this.setName(name);
    		this.setAge(age);
    		this.email = email;//共有
    		
    	}
    	Person.prototype = {
    		setName:function(name){
    			this._name = name;
    		},
    		setAge :function(age){
    			if(age>0 && age < 150){
    				this._age = age;
    			}else{
    				throw new Error("年龄必须在0到150之间");
    			}			
    		}
    	}
    	var p = new Person("JIM",-1,"JIM@165.COM");
    })()

    这种方法较上一种方法还算是有些规范了,但是依然不是我们常用的

    按照我们java中封装的用法,哈哈,说句扯淡的,越是复杂的,才更常用些,当然,这只是句玩笑

    (3)闭包实现封装

    /**
     * 闭包实现封装
     */
    (function(){
    	function person(name,age,email,sex){
    		this.email = email;//public 变量
    		//get
    		this.getName = function(){
    			return this.name;
    		}
    		this.getAge = function(){
    			return this.age;
    		}		
    		//set
    		this.setName = function(name){
    			this.name = name
    		}
    		this.setAge = function(age){
    			if(age>0 && age < 150){
    				this.age = age
    			}else{
    				throw new Error("年龄必须在0到150之间");
    			}				
    		}
    		var _sex = "M";//这也是私有变量的编写方式
    		this.getSex = function(){
    			return _sex;
    		}
    		this.setSex = function(){
    			_sex = sex
    		}
    		this.init = function(){
    			this.setName(name);
    			this.setAge(age);
    		}
    		this.init();
    	}
    	//ceshi 
    	var p = new person("JIM",-1,"JIM@126.COM")
    })()

    相对来说,第三种方法更加的常见,同时也是规范性最强的一个。

  • 相关阅读:
    jvm003-运行时数据区及程序计数器
    jvm002-类加载子系统
    jvm001-JVM与Java体系结构
    (四十三)常用 10 种算法——马踏棋盘算法
    (四十二)常用 10 种算法——弗洛伊德算法
    node 环境配置
    cordova platform add android报错问题处理
    WPF代码引用Resouces中的图片
    WPF中利用WebClient向服务器上传文件
    未能加载文件或程序集“COM.Excel”或它的某一个依赖项
  • 原文地址:https://www.cnblogs.com/sunyingyuan/p/3686224.html
Copyright © 2011-2022 走看看