JavaScript中公有、私有、静态、受保护的属性和方法

摘要:在开发中,我们需要限制某些属性和方法的暴露程度,使得它们不能通过对象实例本身被访问、修改或调用。要了解js面向对象,就必需先了解js中什么是公有、私有、静态、受保护。

在开发中,我们需要限制某些属性和方法的暴露程度,使得它们不能通过对象实例本身被访问、修改或调用。要了解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());//输出fly63


js受保护的属性:

收保护的用于不能直接读写,只能通过一个包装方法对其进行操作,在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('shenqiku.cn')
console.log(m.getName());//shenqiku.cn


以上所述就是本文的全部内容了,希望大家能够喜欢。  


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://shenqiku.cn/article/FLY_523