数码资讯
js构造函数、索引数组和属性的实现和使用
函数p(){ VaR len = arguments.length; 对于(var i = 0;i < i;i + +){ document.write(参数{我} + ); } } 函数(x,y){ Myclass 这个; 这个,y = y; 这个=函数(){ 返回这个; } } VaR M1 =
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
函数p(){
VaR len = arguments.length;
对于(var i = 0;i < i;i + +){
document.write(参数{我} + );
}
}
函数(x,y){ Myclass
这个;
这个,y = y;
这个=函数(){
返回这个;
}
}
VaR M1 =新Myclass(1,2);
VaR M2 =新Myclass(3,4);
P(m1.show(),m2.show());
存在的问题
1。由于所有实例都由同一方法定义的实体进行复制,效率(内存效率和执行效率很低)可以通过原型解决。
2。属性值的访问控制(私有、公共)不能通过闭包来解决。
属性访问的操作对象不是变量,而是对对象的引用。
只读取数值的整数部分的处理。
数学{ < 0'celling:'floor}(本);
关联数组
关联数组必须通过JS中的对象实现。
基本操作通过键、元素设置、元素删除来实现。
var map = x:3,y:4 };
p(map);
删除映射
对于未存在的元素,未定义的访问是未定义的,因为它可以被设置为未定义的值,因此不能通过比较值与未定义值来判断值是否存在。它可以用以下方式枚举。
a 'undefined;
p(a);未定义的
P(typeof地图。x = =一个); / /真的
作为关联数组要注意的点
函数(x,y){ Myclass
这个;
这个,y = y;
}
Myclass。原型。Z = 5;
var obj =新Myclass(1,2);
对于(OBJ VAR键){
P(键+:+ obj {重点}); / /将枚举的原型继承的属性
}
1:2:5
删除对象X; / /真的
P(obj,x); / /未定义
P(obj。Z); / / 5
不能删除继承属性的原型。
删除obj。z; / /真的
P(obj。Z); / / 5
当使用作为关联数组的对象时,通常使用文字创建,即使创建对象数组中没有元素的视图使用空的视图,空属性仍然从原型中的对象类继承。
P('tostring'in obj); / /真的
var obj1 = { };
P('tostring'in obj1); / /真的
for枚举中的
P(obj1。长度); / /未定义
(VaR K在为obj1){
P(obj1 {K });
}
/ /没有元素列举的这是因为可枚举属性的原因
确定其性质或属性或通过继承hasownproperty原型
var map { };
P(map.hasownproperty('tostring ')); / /假
{ } = 1 'tostring地图;
P(map.hasownproperty('tostring ')); / /真的
删除地图{ 'tostring};
P(map.hasownproperty('tostring ')); / /假
Attribute attributes
对象的属性也是一些属性。
下表总结了ECMAscript第五版中定义的属性,属性值定义为属性的值
表1
属性的属性名
意义
可写
可以重写属性值。
枚举
可以枚举为
可配置
属性可以更改,属性可以删除。
得到
可指定属性值的吸气剂函数
集
可以指定属性值的设置函数
不可变对象
字符串对象的对象是典型的不可变对象,在生成后不能再更改。
灵活使用不可变对象可以提高程序的健壮性,例如,当方法被传递给方法参数时,有一种重写对象内容的方法。
在js中可以用以下方式实现不可变对象
1。隐藏属性(隐藏状态),不提供更改操作(关闭实现)
2。灵活使用ECMAscript第五版提供的功能
三.灵活地使用可写的、可配置的属性,以及设置和满足。
在ECMAscript第五版支持对象的不变性的功能表所示
方法名称
属性添加
属性删除
属性值的变化
确认方法
preventextensions
X
o
o
object.isextensible
密封
X
X
o
object.issealed
冻结
X
X
X
object.isfrozen
object.preventextensions例子
var obj = { x 2,y 3 };
object.preventextensions(obj);
无法添加属性
Z = 4的目标;
P(object.keys(obj)); / / X,Y
可以删除属性
删除obj。Y;
P(object.keys(obj)); / / X
可以改变财产的价值。
obj。x = 20;
P(obj,x); / / 20
/ / object.seal示例设置属性的配置错误
var obj = { x 2,y 3 };
Object.seal(obj);
无法添加不能删除
Z = 3的目标;
P(object.keys(obj)); / / X,Y
删除对象X; / /假
P(object.keys(obj)); / / X,Y
可以更改属性值
obj。x = 20;
P(obj,x); / / 20
/ / object.freeze示例设置属性的读写错误
var obj = { x 2,y 3 };
Object.freeze(obj);
无法添加 /不能删除,无法更改属性值
Z = 3的目标;
P(object.keys(obj)); / / X,Y
删除obj X;
P(object.keys(obj)); / / X,Y
可以更改属性值
obj。x = 20;
P(obj,x); / / 20
需要注意
1。上述三种方法一旦发生更改就无法恢复。
2。如果原型继承中继承的方法没有改变,则需要显示它。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。