前言
基于类的对象:我们都知道在面向对象
语言中有一个明显的标志,也就是说,有类的所有概念。我们可以
创建很多对象具有相同的
属性和
方法,通过相似的类。然而,ECMAscript没有阶级观念,也自然
不同于在基于类的语言的对象。
js中的对象:一组无序属性,它可以包含基本值、对象和
函数,也就是说,js中的对象是一组没有特定
顺序的值。对象的每个属性或方法都有自己的名称,每个名称对应一个值。
理解对象
创建对象的方法
1创建对象最简单的方法是创建一个对象实例,然后向它添加属性和方法。
例如
var =新对象();
名称= 'moon龙人;
性别= '男人'的人;
的人。saynameandsex =函数(){
console.log(this.name,这个性别)
}
(人。saynameandsex); / /谦龙男
2使用对象文字形式
例如
var
名称:'moon龙,
性别:'男人',
saynameandsex:函数(){
console.log(this.name,这个性别)
}
}
(人。saynameandsex); / /谦龙男
Type of attribute
ECMAscript有两个属性数据:数据属性和访问
性能。
数据属性
数据属性包含数据值的
位置。可以在这个位置读取和写入值。有四个特性描述它们的行为。
1 {可
配置}:指示是否可以通过
删除属性删除属性…
默认值为真。
2。{ } } {枚举:指示属性是否可以通过在环回…默认值是真的。
3 {可写}:表示是否可以
修改属性的值…默认值是真的。
4 { } }:表示此属性的值。默认值未定义。
修改默认的属性,你必须使用ES5(对象。defineproperty)方法,该方法包含三个
参数:对象的属性,属性名称和描述的属性的对象的特点(可配置、可数、可写,值),建立一个或更多的人可以修改相应的值特征
演示
var;
object.defineproperty(人,'name',{)
可配置:false表示,不允许删除属性
可写的:false表示,不允许重写。
ennumerable:虚假表示不允许通过 / /遍历
在价值客体属性的
设置: / /谦龙价值
})
人的
名字= 2 / /谦龙;尝试建立有效的
删除person.name; / /尝试删除结果不生效
对于(在人var attr){
console.log(人{属性}); / /假
}
console.log(人的名字); / /谦龙
注意:设置为false后,不允许再次修改真值。此外,当Object.defineProperty()被调用时,可配置的,ennumerable写的默认值为false。
访问属性
访问属性不包含数据值,它包含一个对getter和setter函数(但两者的
功能是不需要的)阅读访问属性时,会调用getter函数,这个函数负责返回有效值,写访问属性时将调用setter函数和引入新的价值功能是负责如何
处理数据。
存取属性具有以下特点
{可配置}指示是否删除可用于删除属性以定义新属性。
{ } } {枚举指示是否返回属性可以穿过在环
在读取属性时,{ }调用函数,默认值未定义。
当函数被写入函数时,该函数被调用,默认值是未定义的。
注:访问属性不能直接定义,必须由object.defineproterty定义()
演示
var图书{
_year:2015,这是普通/下划线标记的属性,只能通过对象的方法访问
版本:1
}
Object.defineProperty(书、'year,{)
获取:函数(){
退货。_year; / /默认的book.year获得的值时,返回值_year开机。
},
设置:功能(价值)方法{ / /时设置的默认值boot.year要求数据处理
这_year VaR _year =;
如果(值> _year){
这_year =价值;
本版+ =价值_year;
}
}
})
book.year = 2016;
console.log(book.year,书版); / / 20162
定义多个属性
我们可以通过在object.defineproperties的ES5()添加多个对象属性的方法,这种方法有两个参数,第一个参数是添加和修改其属性的对象,第二对象的属性的属性,添加和修改相应的第一对象。
演示
var图书{ };
object.defineproperties(书,{
_year:{
值:2015,
可写的:在这里设置为true,默认为false。
},
版:{
值:1,
可写的:在这里设置为true,默认为false。
},
年:{
获取:函数(){
这_year返回;
},
设置:函数(值){
这_year VaR _year =;
如果(值> _year){
这_year =价值;
本版+ =价值_year;
}
}
}
})
书,一年= 2016;
console.log(book.year,书版); / / 20162
读取对象的属性
使用object.getownpropertydescriptor()方法在ES5,给定属性可以用来描述。
该方法接收两个参数:该对象的属性定位和读取描述符属性名称,返回一个对象,如果是数据的属性,然后返回属性具有可配置、可枚举,可值。如果是访问属性,然后返回属性具有可配置、可枚举集,得到的。
演示
var图书{ };
object.defineproperties(书,{
_year:{
值:2015,
真的写的:
},
版:{
值:1,
真的写的:
},
年:{
获取:函数(){
这_year返回;
},
设置:函数(值){
这_year VaR _year =;
如果(值> _year){
这_year =价值;
本版+ =价值_year;
}
}
}
})
对象遍历函数
功能showallproperties(obj){
对于(OBJ var attr){
console.log(ATTR +:+ obj {属性});
}
}
VaR描述= object.getownpropertydescriptor(书、'_year '); / /数据属性
无功descriptor2 = object.getownpropertydescriptor(书、'year '); / /访问属性
showallproperties(广义);
console.log(' ============================);
showallproperties(descriptor2);
这里
介绍了Javascript面向对象内容的上述理解。下面,我将向大家介绍几种JS的面向对象的
详细解释方法,有兴趣的朋友继续关注它。