私有变量和特权方法

Posted theworldofbeisong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了私有变量和特权方法相关的知识,希望对你有一定的参考价值。

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

以上是关于私有变量和特权方法的主要内容,如果未能解决你的问题,请参考以下文章

Javascript的私有变量和方法共有变量和方法以及特权方法构造器静态共有属性和静态共有方法

JS 私有变量

两种创建私有变量私有方法的方法

深入浅出javascript封装和继承

javascript--特权方法

对象的私有/公有/静态/特权 属性/方法