实现利用js的闭包原理做对象封装及调用方法,需要遵循以下步骤:
1. 创建一个闭包函数
首先创建一个闭包函数,该函数需要返回一个对象,该对象作为外部函数的返回值,从而使内部对象获得封装,外部程序无法访问内部变量。
var createPerson = (function(){
// 内部变量,对外不可见
var name = '';
var age = 0;
// 返回一个“Person”对象
return {
setName: function(n){
name = n;
},
setAge: function(a){
age = a;
},
getInfo: function(){
return `${name}, ${age} years`;
}
}
})()
在这个创建的闭包函数中,定义了三个方法,其中setName和setAge通过传递参数修改了内部变量name和age,而getInfo方法返回了内部变量的字符串表示。这样,外部程序就无法直接访问内部变量了。
2. 调用闭包函数,创建一个对象
调用createPerson函数,可以得到一个Person对象。这个对象包括三个方法:setName、setAge和getInfo。使用这些方法,就可以修改/访问内部变量。
var obj = createPerson;
obj.setName('Tom');
obj.setAge(20);
obj.getInfo(); // "Tom, 20 years"
在上面的代码中,设置Person对象的name和age,然后使用getInfo方法得到内部变量之前转换的字符串。
示例说明
示例1
var createCounter = function(){
var count = 0;
return {
increment: function() {
return ++count;
},
reset: function() {
count = 0;
}
}
}
var counterObj = createCounter();
counterObj.increment(); // 1
counterObj.increment(); // 2
counterObj.reset();
counterObj.increment(); // 1
这个示例展示了如何使用闭包创建一个计数器对象。通过闭包,内部变量count被保护起来,外部程序无法直接访问/修改。通过increment方法,增加计数值并返回它,通过reset方法,可以将计数器归零。
示例2
var createLoginModule = function(){
var username = '';
var password = '';
return {
setUsername: function(un) {
username = un;
},
setPassword: function(pw) {
password = pw;
},
login: function(un, pw) {
if(un === username && pw === password) {
console.log('Login success!');
} else {
console.log('Login failed!');
}
}
}
}
var loginObj = createLoginModule();
loginObj.setUsername('admin');
loginObj.setPassword('123456');
loginObj.login('admin', '123456'); // Login success!
loginObj.login('admin', 'XXXXXXXX'); // Login failed!
这个示例展示了如何使用闭包创建一个登录验证对象。通过闭包,内部变量username和password被保护起来,外部程序无法直接访问/修改。通过setUsername和setPassword方法,设置登录用户名和密码,通过login方法,输入用户名和密码,进行登录验证。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用js的闭包原理做对象封装及调用方法 - Python技术站