JavaScript中公有、私有、静态、受保护的属性和方法
在开发中,我们需要限制某些属性和方法的暴露程度,使得它们不能通过对象实例本身被访问、修改或调用。要了解js面向对象,就必需先了解js中什么是公有、私有、静态、受保护。
私有:是指属性和方法不能再new对象中读写;
静态:无需实例化就可以调用的方法就叫静态方法;
受保护:不能直接读写,只能通过一个包装方法对其进行操作;
js的公有、私有属性和方法:
function Obj(){
this.name='fly63';//公有属性
var age=1;//私有属性
this.fun=function(){//公有方法
console.log(this.name+age);//age只能在构造函数内部访问
test();
}
function test(){//私有方法,只能内部调用
console.log(this.name+age);//这里的this.name获取不到的
}
}
Obj.prototype.getName = function(){//公有方法
return this.name;
}
var m=new Obj();
console.log(m.name);//fly63
console.log(m.getName());//fly63
console.log(m.age);//undefined
m.fun();//fly631 1
m.test();//报错:m.test is not a function可以看出:
1、构造函数内部通过this声明的属性就是公有属性,通过var声明的就是私有属性。
2、所有定义在原型上方法都是“公有”的。
js的静态属性和方法:
在js中,不需要实例化,即不用new操作符实化对象,就可调用对象的方法和属性。
function Obj(){}
Obj.age = 1;//静态属性
Obj.myname = 'fly63'; //这里不能用name作为属性明,否则会被默认返回对象名称Obj
Obj.getName =function(){//静态方法
return this.myname;//如果这里使用this.name,返回的将是User,所有改用了myname,
}
console.log(Obj.name);//输出Obj,这里就是为什么静态属性不能使用name作为属性名的原因
console.log(Obj.age);//输出1
console.log(Obj.getName());//输出fly63js受保护的属性:
收保护的用于不能直接读写,只能通过一个包装方法对其进行操作,在js中把收保护的模拟成私有属性,通过公用方法进行读取操作,该公用方法我们可以把它称呼为特权方法。这样就实现了保护的目的,如下:
function Obj(name,age){
var name = name,age = age;////私有属性
this.getName = function(){ //特权方法
return name;//私有属性和方法不能使用this调用
}
this.setName=function(newname){
name=newname;
}
}
var m = new Obj('fly63',26);
m.setName('fly63.com')
console.log(m.getName());//fly63.com
以上所述就是本文的全部内容了,希望大家能够喜欢。
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!