‘壹’ 用户可设置的文件属性有哪些
隐藏、存档、只读。
一般电脑桌面点击新建就可以建立一个新文件,只不过不同行业的朋友平时所需要的文件类型不同,比如TXT文件、WORD文件、EXECEL文件等等。不过虽然这些文件的类型不同,但是文件属性都是差不多的。
系统属性、隐藏属性、只读属性和归档属性都是常见文件的属性。
‘贰’ 不同访问属性对类成员的访问的限制都有什么,不同访问属性,对类成员的访问限制都有什么
类成员的访问属性一般有:public,private,protected
public可以被外部类或函数访问,没有限制
private只有定义这个变量的类内部可以访问
protected只有该类和其子类能够访问
internal(C#)只能被当前的应用程序访问
default(Java)只能被当前的包访问,并且子类无法访问
‘叁’ C++类的访问属性
一旦类中的某个属性被声明了“私有”的,所有该类外部的访问都是非法的(记得有个限定符可以解除这种限制,忘记了),不论是否有继承或者是包含关系。
对于stu的私有成员,它外部的stui是无法访问到的。
‘肆’ 一般的对象均具有哪两种属性
对象有两种属性,普通的数据属性和访问器属性。
访问器属性本质上是用于获取和设置值的函数(可以拦截、过滤、处理等操作要设置或获取的属性),但从外部代码来看就像传统属性一样。
对象举例
例如: a = 12 就是用12这个类型为整数的,值为12,在内存空间中创建了一个空间(这个空间会用一个地址来表示,就是id),当对象被创建后,如果该对象的值可以被更改,那么就称之为可变对象(mutable)。
如果值不可更改,就称之为不可变对象(inmutable),如果某个对象包含对其他的对象的引用的话,就称之为容器或者集合。
例如:我创建一个 字典类型的对象并且被b引用 b = list() 我再创建一个字典类型的对象,并且被c 引用 c = dic() 此时b应用该字典类型的对象后 b[‘a’] = c 那么此时的b就是个集合。
‘伍’ c++类的访问属性有哪三个
public:这是公有的成员,允许类外直接访问,当然,这要加上类作用域符::,
protected:这是保护成员,只允许该类及其派生类访问
private:这是私有成员,只允许在该类中进行访问,当然,在类外只可以通过设定的公有函数进行访问。
更具体的可以参考《c++大学教程第五版》,这本书不错。
‘陆’ 对象的属性和特性
对象就是无序属性的集合, 其属性可以包含 基本值 , 对象 或者 函数 。属性在创建时带有一些特征值(characteristic)。
数据属性
数据属性数据属性包含一个数据值的位置,这个位置可以读写。数据属性有4个特性(attribute)。
<code><font size="4"><b>Object.defineProperty()</b></font></code> 方法用来 修改 属性的 特性 ,也可以用这个方法创建属性并设置特性。
接收三个参数,即属性所在的 对象 , 属性 名 (字符串形式) , 描述符对象 (用 { } ) 。
如果调用这个方法时 创建 一个新 属性 时,不 指定特性 ,则除 [[value]]] 外的特性的默认值都为 false 。
访问器属性
访问器属性不包含数据值,包含 [[get]] 和 [[set]] 函数,用来 定义 如何 读取 和 写入 数据,这2个函数是 可选的 。
访问器属性有4个特性,访问器属性的特性 必须通过 Object.defineProperty() 来定义。
*严格模式下,对没有设置set的属性写入,或者对没有设置get的属性读取,都会抛出错误。
<code><font size="4"><b>Object.defineProperties()</b></font></code> 方法用来对 一个对象 的 多个属性 同时进行定义,接收2个参数。
第1个参数是要添加和修改其属性的对象,第2个参数接收一个对象,即要修改的内容,其属性与第1个对象中的属性一一对应。
<code><font size="4"><b>Object.getOwnPropertyDescriptor()</b></font></code>方法用来读取一个对象 实例 的某一个属性的特性,返回一个 对象 。
参数分别为:属性所在的对象,要读取的属性。
新实例里有一个 constructor 属性指向构造函数, constructor 属性默认是 不可枚举 的。
当调用构造函数时不加 new ,则是当做一般函数使用,this指向该函数本身所在的作用域(一般是window)。
原型模式
<code><font size="4"><i>prototype.</i><b>isPrototypeOf</b>(<i>object</i>)</font></code>方法
<code><font size="4"><b>Object.getPrototypeOf</b>(<i>object</i>)</font></code>方法
<code><font size="4"><i>object.</i><b>hasOwnProperty</b>(<i>"property"</i>)</font></code>方法
<code><font size="4"><b>in</b></font></code>操作符
<code><font size="4"><b>Object.keys</b>(<i>object</i>)</font></code>方法
使用更简单的语法
使用一个包含所有属性和方法的对象字面量来 重写 整个原型对象。
原型对象存在的问题
原型共享可能会导致修改一个对象实例而导致另一个对象实例也被修改
‘柒’ 标题类的访问属性有哪几种。是什么
有三种不同访问属性的成员。
在类的内部,类的声明和类的定义可以访问所有成员,在类的外部,对象和其他函数不能访问成员。
在继承中的三种不同的派生方式,对派生类对基类成员的访问属性得改变。
‘捌’ 属性和域
什么是属性?
实际是指getter和setter方法,虽然和字段是两个概念,姑且可以理解为有getter和setter方法的字段。
如何声明?
完整语法:
其中的初始化器、getter和setter方法是可选的。如果没有自定义getter和setter的实现,就会使用默认的。
以下两种情况属性类型也可省略:
两种属性:
只读属性: val 关键字声明
可变属性: var 关键字声明
访问属性:
访问属性使用点操作符, 对象名.属性名 ,如:
如果要修改访问器的可见性或添加注解,但又不需要修改默认实现,你可以重新定义方法,但不定义它的实现,这样仍然是使用默认实现。 如:
Kotlin类不能拥有域变量(也就是Java中的成员变量),但是使用访问器时又需要这种域变量,所以Kotlin提供了后端域变量,可以用 field 标识符来访问。
如:
什么情况下会生成后端域变量?
下面这种情况下就不会生成后端域变量:
为什么不用 this 关键字访问属性呢?
试想下, this 代表当前对象,而上面说过通过点操作符,访问属性时,实际上是调用了访问器,在访问器内部实现中再调用访问器就会出现无限递归。所以,通过Backing Filed可以避免这个问题。
如果你的操作是想访问属性内部的属性,或者集合里面的元素,而不是属性本身,那么你可以声明这个属性为 private 的(后端属性),然后定义个 public 的属性并自定义其访问器,在自定义的访问器内部访问后端属性。如:
值在编译期就能确定的属性,用 const 关键字修饰。满足以下条件的属性可以标记为编译器常数值:
如:
编译器常数值可以用在注解内:
通常属性被声明为非 null 类型就必须就地初始化。但是,这种限制在很多情况下是不方便的,比如,声明的属性通过依赖注入的方式来初始化。这种情况下,你就可以使用 lateinit 关键字来修饰声明的属性。
如:
使用限制:
‘玖’ 访问属性和访问实例变量的区别
1、类中的属性包括数据成员和函数成员,函数成员可以调用类的所有数据成员(无论公有,或私有)。 2、实例化对象只能调用类的公有的数据成员或公有的函数成员。
‘拾’ 对象决定类的属性
ECMAScript有两种属性:
1.数据属性:
数据属性包含一个数据的位置,在这个位置可以读取和写入值。
2.访问器属性
访问器属性不包含数据值:它们包含一对getter和setter函数(不过这两个函数都不是必须的),在读取访问器属性时,会调用getter函数,这个函数负责返回有效的值;在写入访问器属性时,会调用setter函数并传入新值,这个函数负责决定如何处理数据。
对象属性是由名字,值和一组特性(attribute)构成的。
在介绍对象属性的特性之前先介绍两个属性:
getter和setter
在ECMAScript5中,属性值可以用一个或两个方法代替,这两个方法就是getter和setter。由这两个函数定义的属性称为“存取器属性”,它不同于“数据属性”,数据数据属性只有一个简单的值。程序在查询存取器属性的值的时候,JS调用getter方法(无参数)。这个方法的返回值就是属性存取表达式的值。当程序设置一个存取器属性的值,JS调用setter方法,将赋值表达式右侧的值当做参数传入setter。这个方法负责设置属性值。可以忽略setter方法的返回值。
和数据属性不同,存取器属性不具有可写性。如果一个数据同时具有getter和setter方法,那么它是一个读/写属性。如果它只有getter方法,那么它是一个只读属性,如果它只有setter方法,那么它是一个只写属性,读取只写属性总是返回undefined。
小插曲:属性访问表达式
属性访问表达式运算得到一个对象属性或一个数组元素的值。JS为属性访问定义了两种语法:
//expression指定对象,identifer指定需要访问的属性名称
expression.identifer
//expression指定对象,第二个表达式指定要访问的属性的名称或者代表要访问数组元素的索引
expression[expression]
1
2
3
4
1
2
3
4
不管用哪种形式的属性访问表达式,在.或者’[‘的表达式总是会首先计算。如果计算结果是null或者undefined,表达式会抛出一个类型错误异常,因为这两个值都不能包含任意属性的值
如果运算结果不是对象(或者数组),JS会将其转换为对象
用.indentifer的写法=更加简单,但是需要注意的是这种方式只适用于访问的属性名称是合法的标识符,并且需要知道要访问的属性名称。如果属性名称是一个保留字或者包含空格标点符号,或者是一个数字(对于数组),则必须使用方括号的写法。