Javascript创建对象的基本模式

原创 2013年12月01日 20:40:41

  • 门户大开型(fully exposed): 只能提供公用成员
  • 闭包: 真正创建私有成员,只有通过一些公开的方法来访问
  • 还是闭包:共享一些静态成员,节能减排

先看看大开门户的对象

var Book = function(name, author){
   this.bookname = name;
   this.bookauthor = author;
}

var book =new Book("Javascript Design Pattern", "Jim Backerly");

这种方法简单,但是成员是public的,无法达到封装内部构造的作用。


创建一个闭包来存放私有成员,只允许通过特定的方法来访问


公开成员是构造函数的内嵌函数,拥有访问内部变量的能力,我们可以通过它来访问实例中的私有成员: 

var Book =function(name,author){ 
	var author= author; 
	this.getAuthor=function(){
		return author;
	}
}
var book =new Book("Javascript Design Pattern", "Jim Backerly");

book.getAuthor(); // return "Jim Backerly"

使用构造函数的内部局部变量来充当实例的私有成员, 一旦new一个新的实例都会创建一个这样的私有实例成员。只能通过实例方法来访问,不能直接访问。


静态方法和属性:让所有实例共享一些方法和属性往往是个不错的主意

  静态成员是类级别的成员, 因此它不能存放在构造出每个实例的构造函数之中,那实例(构造函数)如何访问? 答案还是:闭包!!!

  和实例级别的成员不同的是,静态成员不存在任何一个实例之中。 实例级别的成员将会在构造函数别被调用之后,存放在一个局部变量之中,并且通过闭包中公开成员(内嵌函数)来访问,内嵌函数是实例的公开方法。静态成员在闭包中也是存放在一个局部的变量, 不同的是这个变量可以被内嵌的构造函数访问。 这个构造函数在创建的每一个实例中通过闭包访问外层函数中的局部变量, 从而实现一个私有的静态成员。 

var Book = (function(){
	var count;
    	return function(name, author){
		var bookName = name;
		var bookAuthor = author;
		this.getName = function() {return bookName;}
		this.getAuthor = function(){return bookAuthor;}
		this.count = count;
	}
})();

这段执行之后Book就是闭包中return的构造函数, 可以通过new Book() 来创建新的实例, 每个实例内部都可以访问同一个静态的count变量。  

公开的静态方法和属性较为简单, 把方法或者属性直接作为构造函数的属性即可


机器学习基本概念

国外: 1、kaggle:https://www.kaggle.com/ 简介:这个比赛应该是数据挖掘比赛里面很出名的了,竞赛题目源源不断,种类丰富,而且有不菲的竞赛奖金,是刚入门数据...
  • u012017783
  • u012017783
  • 2017年12月11日 22:08
  • 60

学习《javascript高级程序设计》笔记——继承的基本模式

学习《javascript高级程序设计》笔记——继承的基本模式
  • start_heart
  • start_heart
  • 2015年03月12日 16:24
  • 437

责任链--基本模式

举例:如Structs2框架中的FilterChain过滤器链,当如果需要对一个字符串进行多次不同的处理,都属于同一类的操作,但是注意过滤过程也许会有顺序的要求。main函数 用极限编程,现在mai...
  • hackerHL
  • hackerHL
  • 2017年01月19日 01:41
  • 96

机器学习之基本模式

机器学习之基本模式
  • kaikai_sk
  • kaikai_sk
  • 2016年10月28日 20:55
  • 126

SPARQL基本模式查询

上一篇就是简单的介绍了下SparQL,这篇文章了介绍下SPARQL的基本模式查询 仍然使用上一篇文章的例子: ...
  • hang916
  • hang916
  • 2018年01月07日 15:23
  • 30

Gvim入门(1)——三种基本模式

由于想给python换个个IDE,几番纠结,便入手了vim for Windows,也就是Gvim。初入Gvim,爬了不少坑,就像一打开Gvim根本不知道如何编辑,就像个傻帽一样。经过了两天的研究,终...
  • u012745215
  • u012745215
  • 2015年04月25日 14:25
  • 2135

Android操作SQLite数据库基本模式

import android.app.Activity; import android.content.ContentValues; import android.content.Context; i...
  • u010335748
  • u010335748
  • 2015年07月25日 19:59
  • 159

Android系统架构基本模式解析

如今,大家面对市场中种类繁多的手机必然挑的眼花缭乱。不过,在智能手机占据主要地位的今天,挑选手机的主要因素就是挑选一款性能高的手机操作系统,Android就是其中的一个必然选择。Android系统架构...
  • junglyfine
  • junglyfine
  • 2013年03月23日 15:37
  • 640

chromium源码剖析之chrome进程通信的基本模式

1. Chrome进程通信的基本模式 进程间通信,叫做IPC(Inter-Process Communication),在Chrome不多的文档中,有一篇就是介绍这个的,在这里。Chrome最主...
  • business122
  • business122
  • 2013年09月06日 17:03
  • 1461

C语言实现串的基本模式匹配

前言本程序是数据结构上机实验内容,参考《数据结构(C语言版)》(清华大学出版社)中串操作部分的伪代码实现。题目要求设计一个程序实现串的基本模式匹配。所谓模式匹配,就是判断某个串是否是另一个已知串的子串...
  • lgj123xj
  • lgj123xj
  • 2017年05月24日 14:45
  • 1000
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Javascript创建对象的基本模式
举报原因:
原因补充:

(最多只允许输入30个字)