欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js基礎(chǔ)知識(shí)(公有方法、私有方法、特權(quán)方法)

 更新時(shí)間:2015年11月06日 09:31:46   作者:wujie520303  
這篇文章主要介紹了js基礎(chǔ)知識(shí),包括公有方法、私有方法,以及特權(quán)方法的使用介紹,感興趣的小伙伴們可以參考一下

本文涉及的主題雖然很基礎(chǔ),在許多人看來(lái)屬于小伎倆,但在JavaScript基礎(chǔ)知識(shí)中屬于一個(gè)綜合性的話題。這里會(huì)涉及到對(duì)象屬性的封裝、原型、構(gòu)造函數(shù)、閉包以及立即執(zhí)行表達(dá)式等知識(shí)。

公有方法
公有方法就是能被外部訪問(wèn)并調(diào)用的方法。

// 在對(duì)象中
var Restaurant = {
 name: 'McDonald',
 // 公有方法
 getName: function() {
 return this.name;
 }
}

// 在構(gòu)造函數(shù)中
function Person(name, age) {
 this.name = name;
 this.age = age;
 // 公有方法
 this.getName = function() {
 return this.name;
 }
}

// 在原型中
Person.prototype.getAge = function() {
 return this.age;
}

私有方法特權(quán)方法
這兩個(gè)方法一般放在一起討論,原因在于我們定義的特權(quán)方法是指有權(quán)訪問(wèn)內(nèi)部私有屬性和私有方法的公有方法,而私有方法是指外部不可見(jiàn)且不可訪問(wèn)的方法。

通常定義一個(gè)對(duì)象的方式有二種,一是使用Object實(shí)例化或者對(duì)象表達(dá)式,二是使用構(gòu)造函數(shù)。同樣在不同的方式下面定義私有方法和特權(quán)方法的形式也不相同。

在對(duì)象中
這里我們通過(guò)Object對(duì)象表達(dá)式來(lái)創(chuàng)建一個(gè)對(duì)象并添加一些屬性和方法,然后直接采用靜態(tài)的方式調(diào)用。對(duì)象的私有數(shù)據(jù)放置在一個(gè)匿名函數(shù)立即執(zhí)行表達(dá)式(IIFE)中。這意味著這個(gè)函數(shù)只存在于被調(diào)用的瞬間,一旦執(zhí)行后就立即被銷(xiāo)毀了。

在對(duì)象中創(chuàng)建私有數(shù)據(jù)的方式在對(duì)象的模式(指創(chuàng)建對(duì)象的模式)中被稱(chēng)之為模塊模式,它的基本格式如下:

var yourObject = (function() {

 // 私有屬性和方法

 return {
 // 公有方法和屬性
 }
}) ();

在模塊模式中,返回的對(duì)象字面量中只包含可以公開(kāi)的屬性和方法。

var Restaurant = (function() {
 // 私有屬性
 var _total = 10;

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

 return {
 name: 'McDonald',
 getTotal: _getTotal,
 buy: _buyFood
 }
}) ();

Restaurant.buy();
console.log(Restaurant.name); // 'McDonald'
console.log(Restaurant.getTotal()); // 9

注意我們使用了閉包的方式來(lái)間接使用內(nèi)部私有變量,同時(shí)對(duì)餐廳(Restaurant)名(name)進(jìn)行了初始化。

在構(gòu)造函數(shù)中
在上面介紹的模塊模式創(chuàng)建私有方法時(shí),公有方法和特權(quán)方法并沒(méi)有什么本質(zhì)上的區(qū)別,原因在于這個(gè)概念是來(lái)自于使用構(gòu)造函數(shù)創(chuàng)建私有數(shù)據(jù)的時(shí)候定義出來(lái)的。

在構(gòu)造函數(shù)中定義私有屬性和方法很方便,我們不需要使用閉包,可以在調(diào)用的時(shí)候初始化數(shù)據(jù)。

function Restaurant(name) {
 // 私有屬性
 var _total = 10;

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

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

 // 特權(quán)方法
 this.buy = function() {
 _buyFood();
 }

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

// 公有方法, 注意這里不能訪問(wèn)私有成員_total
Restaurant.prototype.getName = function() {
 console.log(_total); // Uncaught ReferenceError: _total is not defined
 return this.name;
}

var McDonald = new Restaurant('McDonald');
console.log(McDonald.getName()); // 'McDonald'
McDonald.buy();
console.log(McDonald.getTotal()); // 9

合二為一,更加靈活的方式
使用模塊模式我們可以多次調(diào)用,每次執(zhí)行完后都會(huì)被銷(xiāo)毀掉。使用構(gòu)造函數(shù)方式可以傳入一些初始化的數(shù)據(jù),但在公有方法中無(wú)法訪問(wèn)到私有成員屬性,如果有很多公有方法需要訪問(wèn)私有數(shù)據(jù),我們?nèi)坑锰貦?quán)方法來(lái)寫(xiě),最后會(huì)給每個(gè)實(shí)例帶去很多沒(méi)有必要的方法。因此,將兩者結(jié)合在一起可以長(zhǎng)短互補(bǔ),結(jié)合方式也很簡(jiǎn)單

var Restaurant = (function() {
 // 私有屬性
 var _total = 10;

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

 // 構(gòu)造函數(shù)
 function restaurant(name) {
 this.name = name;
 this.getTotal = function() {
 return _total;
 }
 }

 restaurant.prototype.buy = function() {
 console.log(_total); // 10
 _buyFood();
 }

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

 return restaurant;
}) ();

var McDonald = new Restaurant('McDonald');
console.log(McDonald.getName()); // 'McDonald'
McDonald.buy();
console.log(McDonald.getTotal()); // 9

以上就是本文的全部?jī)?nèi)容,小編只是總結(jié)了其中一小部分,還有許多未提及到的知識(shí)點(diǎn),大家可以自己摸索研究,希望本文可以對(duì)初學(xué)者有所幫助。

相關(guān)文章

最新評(píng)論