JavaScript建立私人函數和變數的例子

來源:互聯網
上載者:User


他們堅信有一點,如果你建立一個屬性對象,或者建立三維全域變數,這是任何人都公平的遊戲。然而,一些非常簡單的模式,你可以使用JavaScript來保護在訪問一個給定的對象或變數的私人!

Classes

你可能知道在JavaScript中是不存在真實的類的,但使用功能和原型,我們可以類比非常好。使用這種模式,你也可以類比私人變數:

function MyClass(parameter) {    // Create the private var    var privateVar = 8,        self = this;    self.parameter = parameter    // Function that handles the private    function handlePrivate() {        return privateVar ? privateVar-- :  false;    }    // Public method that calls the handler    // Returns parameter until it's been accessed 8 times    this.getPrivate() {        return handlePrivate() ? self.parameter : null;    }}

私人的建立通過構建函數,而且也只能通過構建函數建立,添加了特別的存取方法來訪問私人屬性,在以上樣本中,值只有通過特定的方法訪問。

Closures

模式圍繞一個變數範圍關閉,返回一個對象或函數來訪問變數。這是一個簡單的例子:

var accessor = (function() {    // Create the private var    var privateVar = "You Can't See Me, ";        // Some other functionality here that periodically changes privateVar, because it has access to it    // [ more code here ]        // Return the accessor    return function(name) {        return privateVar + name;    };})();// Use!// currentValue = accessor("David");  "You Can't See Me, David"

privatevar變數不可用外關閉,所以沒有辦法直接存取的。我們這樣做,然而,能夠變回從閉合有一個定義函數。因此,變數保持私密,你可以訪問它的值,但不允許直接存取。你也可以返回修改受保護物件變數的方法:

var accessor = (function() {        // The "private"    var val = 9;        // An object for getting and setting    return {        get: function() {            return val * 3;        },        set: function(s) {            val = s;        }    };})();

當然,以上的模式,使用者可以重新獲得類似的方法:

accessor = function(n) { return "My custom string, " + n; }

通常所有的功能處理私人資訊處於封閉,防止使用者重寫方法的問題。像這樣的東西:

var accessor = (function() {        var permissions = {};        function handleResult(perm) {        // Do something with the result    }        return function(permissionToCheck, callback) {        if(permissions[permissionToCheck]) != undefined) {            callback(permissions[permissionToCheck]);        }        else {            $.post({                url: "/permissions"                data: {                    perm: permissionToCheck                }            }).success(function(res) {                callback(handleResult(res));            });        }    };    })();

在JavaScript簡單一定美,不把它寫下來,因為它不提供相同的顯式結構為其他語言

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.