国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript私有變量實例詳解

2024-05-06 15:42:54
字體:
來源:轉載
供稿:網友

本文實例講述了JavaScript私有變量。分享給大家供大家參考,具體如下:

任何在函數中定義的變量,就是私有變量,因為這些變量在函數外部是無法訪問到的。總的來說,私有變量包括函數的參數、局部變量和在函數內部定義的其他函數。

function add(num1, num2){  var sum = num1 + num2;  return sum;}

上面的例子中的 num1, num2, sum 就是函數的私有變量。

如果在這個函數內部創建一個閉包,那么閉包通過自己的作用域鏈也可以訪問這些變量,利用這一點,就可以創建用于訪問私有變量的公有方法。

有權訪問私有變量和私有函數的公有方法叫做特權方法。

1. 構造函數模式

創建特權方法的方式有兩種,第一種是在構造函數中定義:

function MyObject(){  //私有變量  var privateVariable = 10;  //私有函數  function privateFunction(){    return false;  }  //特權方法  this.publicMethod = function(){    privateVariable++;    return privateFunction();  };}

這里定義的的特權方法是一個閉包,所以能夠訪問在構造函數中定義的私有變量和私有函數。在創建 MyObject 實例后,只能通過特權方法來訪問定義的私有變量和函數。

利用這種技術,可以隱藏那些不能被外部直接修改的數據:

function Person(name){  this.getName= function () {    return name;  };  this.setName= function (value) {    name=value;  }}var person=new Person("deniro");console.log(person.getName());//deniroperson.setName("lily");console.log(person.getName());//lily

上面的代碼定義了兩個特權方法,它們都可以在函數外部被調用,因為它們是閉包,所以可以通過作用域訪問 name。name 在 Person 的每一個實例中都不同,因為每次調用構造函數都會重新創建這兩個方法。

在構造函數中創建特權方法的缺點是,必須使用構造函數模式來實現,而這樣做會在每個實例上創建同樣的一組新方法!

2. 靜態私有變量模式

通過在私有作用域中定義私有變量和函數,也可以創建特權方法,基本模式是:

(function(){  //私有變量  var privateVariable = 10;  //私有函數  function privateFunction(){    return false;  }  //構造函數  MyObject = function(){  };  //公有/特權方法  MyObject.prototype.publicMethod = function(){    privateVariable++;    return privateFunction();  };})();

公有方法在原型上定義,使用的原型模式。另外,我們使用的是函數表達式來定義構造函數,而且沒有用 var,這種在初始化時未經聲明的變量,就會創建一個全局變量。因此,MyObject 就成了一個全局變量,能夠在私有作用域之外被訪問到。但在嚴格模式下給未經聲明的變量賦值會導致錯誤。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 福鼎市| 德钦县| 绥德县| 喀什市| 玛沁县| 阳曲县| 芒康县| 巧家县| 水富县| 宜阳县| 灵宝市| 茌平县| 樟树市| 岳池县| 高淳县| 竹北市| 和田市| 昌乐县| 卓尼县| 即墨市| 黔江区| 左贡县| 湾仔区| 乌兰浩特市| 奈曼旗| 资源县| 香格里拉县| 郓城县| 天峻县| 繁昌县| 黎城县| 舟曲县| 莱芜市| 河曲县| 晋州市| 霍邱县| 福清市| 淮南市| 和平区| 渑池县| 绥滨县|