javascript没有封装的概念,需要自己实现
1.实现块级作用域
在javascript中没有块级作用域的概念,通过匿名函数可以自己构造块级作用域
for(var j = 0;j < 10;j++){
console.log("loop j:"+j);
}
console.log("out j:"+j); //在外部任然可以访问到j
(function(){
for(var i = 0;i < 10;i++){
console.log("loop i:"+i);
}
})()
console.log(i) //这里会报错
2.封装
javascript本身没有私有变量的概念,可以通过以下几种方式实现属性的封装
1.通过特权方法
通过闭包的形式来实现封装,缺点是只能使用构造函数模式,特权函数无法添加到prototype中,每构建一个实例都会创建一个新的方法function Person(name,age){ this.getName = function(){ return name; } this.setName = function(value){ name = value; } this.getAge = function(){ return age; } this.setAge = function(value){ age = value; } } var person = new Person("feng",19) console.log(person.getName());
2.通过私有变量
此中方法是利用函数中创建的变量为函数私有和在函数中声明变量时如果没有var
关键字,声明的变量为全局变量(函数同理)(function(){ //创建一个私有作用域 var nameValue = null; var ageValue = null; Person = function(name,age){ nameValue = name; ageValue = age; } Person.prototype.sayName = function(){ console.log(nameValue); } })() var person = new Person("feng",19); person.sayName();
3.模块模式
这种模式用于创建单一字面量实例,即直接通过var
构建一个实例var person = function(){ var name = "feng"; var age = 19; return { getName:function(){ return name; }, getAge:function(){ return age; } } }() console.log(person.getName());