【www.bbyears.com--php函数】
他们坚信有一点,如果你创建一个属性对象,或者创建三维全局变量,这是任何人都公平的游戏。然而,一些非常简单的模式,你可以使用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简单一定美,不把它写下来,因为它不提供相同的显式结构为其他语言