本篇文章主要针对javascript的属性进行分析,由于javascript是一种基于对象的语言,本身没有类的概念,所以对于javascript的类的定义有很多名字,例于原型对象,构造函数等,它们都是指javascript中的类。
例如:function Person(){} var p = new Person(); 这里的Person可以看作一个类,而p则是这个类的实例也可以称为对象。这里主要分析js里面的四种属性。
私有属性,指定义在类中用var声明的,即var propertyName = sonmeValue,只能在这个类里面进行访问,不能被继承,也不能在原型方法中访问的属性。
特权属性,指在类中或者说在构造函数中(js里是同一个东西),使用this关键字,即this.propertyName = someValue,该属性在类中可以访问,在原型方法中可以访问,在该类的对象中也能被访问,甚至用call或apply继承时也能访问.
共有属性,指通过ClassName.prototype.propertyName=someValue 来定义的,如果该属性在类中没定义,即没有重命的特权属性,则可以当特权属性被访问,即能在对象中调用,通过prototype继承的子类也能访问。
静态属性,直接ClassName.propertyName=someValue 来定义,相当于一个命名空间,在类的内部外部都能访问。
例1: 各种属性定义
function Person(){ var private_name = "小明"; //私有属性 var private_age = 10; //私有属性 this.privilege_name = "小红"; //特权属性 this.privilege_age = 9; //特权属性 } Person.prototype.public_name = "小芳"; //公有属性 Person.prototype.public_age =8; //共有属性 Person.static_name = "小李"; //静态属性 Person.static_age = 7; //静态属性 var pp = new Person(); pp.name = '小王'; //静态属性 pp.age = 6; //静态属性
在这个例子里指出了这四种属性的定义方式。注意静态属性里,因为Person和pp都是Object实例,如下面代码执行结果可以看出。
console.log(Person instanceof Object,pp instanceof Object); //true true
所以都可以定义静态属性。
下面来分析一下这些属性的访问权限。
例2:各种属性的访问权限
function Person(){ var private_name = '小明'; var private_age = 10; this.privilege_name = '小红'; this.privilege_age = 9; //定义一个特权方法 this.showPrivilegeName = function(){ console.log(private_name); // private_name is not defined .说明私有属性可以在特权方法中访问. console.log(this.privilege_name ); //输出:"小红"。说明特权属性可以在特权方法中访问 console.log(this.public_name); //输出:"小芳"。说明共有属性可以在特权方法中访问 console.log(Person.static_name); //输出:"小李"。说明类的静态属性可以在特权方法中访问 } } Person.prototype.public_name = '小芳'; Person.prototype.public_age =8; Person.static_name = '小李'; Person.static_age = 7; var pp = new Person(); pp.name = '小王'; pp.age = 6; //定义一个原型方法 Person.prototype.showName = function(){ //console.log(private_name); // private_name is not defined .说明私有属性不能在原型方法中访问. console.log(this.privilege_name ); //输出:"小红"。说明特权属性可以在原型方法中访问 console.log(this.public_name); //输出:"小芳"。说明共有属性可以在原型方法中访问 console.log(Person.static_name); //输出:"小李"。说明类的静态属性可以在原型方法中访问 } pp.showPrivilegeName(); pp.showName(); console.log(pp.private_name); //undefined 私有属性不能在实例化的对象中访问 console.log(pp.privilege_name ); //输出:"小红"。说明特权属性可以在原型方法中访问 console.log(pp.public_name); //输出:"小芳"。说明共有属性可以在原型方法中访问 console.log(Person.static_name); //输出:"小李"。说明类的静态属性可以在原型方法中访问 console.log(pp.name); //输出:"小王"。说明实例对象的静态属性可以在原型方法中访问
查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/script/
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索方法
, 属性
, 属性访问
, console
, name属性
, 原型
, person
, js特权方法
, js定义私有方法
, js对象私有属性
, 私有特权
, 特权方法
, 特权
javascript类的定义
javascript 属性类型、javascript 对象属性、javascript 删除属性、javascript 属性、javascript获取属性值,以便于您获取更多的相关知识。