1.定义

私有变量:js的作用域属于函数作用域 ,外部变量不能访问函数内部定义的变量  ,此变量为私有变量

特权方法:有权访问内部私有变量和方法的公有方法

2.定义对象的方式

一是使用Object实例化或者对象表达式 

var TaoBao = (function() {

// 私有属性 var _total = 10;

// 私有方法var _buyFood = function() { _total--; };

var _getTotal = function() { return _total; }

return { name: 'taobao', getTotal: _getTotal,

//使用了闭包的方式来间接使用内部私有变量

buy: _buyFood } }) ();

TaoBao.buy(); console.log(TaoBao.name); // 'taobao'

console.log(TaoBao.getTotal()); // 9

二是使用构造函数。

function TaoBao(name) {

// 私有属性 var _total = 10;

// 公有属性 this.name = name;

// 私有方法 function _buyFood() { _total--; }

// 特权方法,才能访问私有的属性和私有的方法 this.buy = function() { _buyFood(); }

this.getTotal = function() { return _total; } }

// 公有方法, 注意这里不能访问私有成员_total TaoBao.prototype.getName = function() { //console.log(_total); // Uncaught ReferenceError: _total is not defined return this.name; } var taobao = new TaoBao('taobao'); console.log(taobao.getName()); // 'taobao' taobao.buy(); console.log(taobao.getTotal()); // 9

三合二为一

 var TaoBao = (function() {

// 私有属性 var _total = 10; // 私有方法

function _buyFood() { _total--; } // 构造函数

function TaoBao(name) {

this.name = name;

this.getTotal = function() { return _total; } }

//这里怎么可以访问私有的方法??这里不是TaoBao内部的私有哦!

TaoBao.prototype.buy = function() {

console.log(_total); // 10

_buyFood(); }

TaoBao.prototype.getName = function() { return this.name; }

return TaoBao; }) ();

var taobao = new TaoBao('taobao');

console.log(taobao.getName()); // 'taobao'

taobao.buy(); console.log(taobao.getTotal()); // 9