javascript 对象

来源:互联网 发布:腾飞投资理财源码 编辑:程序博客网 时间:2024/06/06 06:39
对象(一)
  • 创建对象
  •  属性的查询和设置
  • 对象属性操作:
删除、检测、枚举




































一 、创建对象

通过 JavaScript,您能够定义并创建自己的对象。
创建新对象有两种不同的方法:
  • 定义并创建对象的实例
  • 使用函数来定义对象,然后创建新的对象实例
例子:(这个例子创建了对象的一个新实例,并向其添加了四个属性)
<script>
var person=new Object();
person.firstname="John";
person.lastname="Doe";
person.age=50;
person.eyecolor="blue";
document.write(person.firstname + " is " + person.age + " years old.");
</script>
使用对象构造器
本例使用函数来构造对象:
function person(firstname,lastname,age,eyecolor){
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;
}
myFather=new person("John","Doe",50,"blue");
document.write(myFather.firstname + " is " + myFather.age + " years old.");
在JavaScript中,this通常指向的是我们正在执行的函数本身,或者是指向该函数所属的对象(运行时)












二、  属性的查询和设置
1.属性的查询
对象属性的 查询可以通过点(.)或中括号([])运算符来查询。对于点(.)来说,右侧必须是一个属性名命名的标识符(注意:javascript语言的标识符有自己的合法规则,并不同于带引号的字符串);对于方括号([])来说,方括号内必须是一个字符串表达式,这个字符串就是属性的名字。
例子 .:
var objPerson ={
"name":"小红",
"age": 18,
"sex":"girl",
}
var name =objPerson.name,
age=objPerson.age,
sex=objPerson.sex;

console.log(name+"已经"+age+"岁了,性别"+sex)

除了使用.运算符还可以用【】运算符来对对象属性查询:

2. var objPerson ={
"name":"小红",
"age": 19,
"sex":"girl",
}
var name =objPerson['name'],
age=objPerson['age'],
sex=objPerson['sex'];

console.log(name+"已经"+age+"岁了,性别"+sex)

查询对象属性时,如果属性名字有空格、连字符、JavaScript中的保留字时,需要使用【】运算符来查询 如






var book ={
"main title":"javascript",//属性名字里有空格,必须用字符串表示
'sub-title':" the def guide" //属性有连接字符,因此需要使用双引号
"for":"all adiences" //for 是保留字,因此需要双引号。
author:{
firstname:'dabid' //属性值也是一个对象
surname:"flangan" //属性的名字都没有引号

}
};
属性的设置
属性的设置和前面说的属性查询类似,可以通过 . 和【】运算符来设置对象的属性如:
var obj = {}; //创建一个空的对象
obj.name="小红"
obj["age"]=35;
console.log(obj); //{name: "小红", age: 35}
上面是创建的是一个空对象,如果你想修改一个已有对象的某个属性值时,也可以使用同样的方法:
var objPerson={
'name':'小红',
'age':18,
'sex':'girl',

}
objPerson.age =25;
objPerson['sex']="boy";
console.log(objPerson) //{name: "小红", age: 25, sex: "boy"}



1.删除属性
delete运算符可以删除对象的属性
delete person.age //即person不再有属性agedelete person['age']//或者这样


delete只是断开属性和宿主对象的联系,而不会去操作属性中的属性  看到delete a.p之后b.x仍然为1


var a = {p:{x:1}};
var b = a.p;
console.log(a.p.x); //1
delete a.p;
console.log(a.p.x); //TypeError a.p is undefined
console.log(a.p); //undefined
console.log(b.x); //1
delete只能删除自有属性,不能删除继承属性(要删除继承属性必须从定义这个属性的原型对象上删除它,当然,这会影响到所有继承来自这个原型的对象)
function inherit(p){
if(p == null){ // 不能从null中继承
throw TypeError();
}
if(Object.create){ //如果有这个方法就直接使用
return Object.create(p);
}
var t = typeof p;
if(t !== "object" || t !== "function"){ //要继承的对象 类型要符合
throw TypeError();
}
function f(){ }; //定义一个空的构造函数
f.prototype = p; //原型指向要继承的对象p
return new f(); //创建f对象,此对象继承自p
}

var obj = {x:1};
var obj1 = inherit(obj);
obj1.y = 2;
console.log("x = "+obj1.x+" y = "+obj1.y); //x = 1 y = 2
delete obj1.x;
delete obj1.y;
console.log("x = "+obj1.x+" y = "+obj1.y); //x = 1 y = undefined

当然了,可配置的属性才能用到delete
比如
delete Object.prototype;// 不能删除 不可配置var x = 1;deletethis.x;//不能删除this.y = 1;delete y;//这样可以删除function f(){ }deletethis.f;//不能删除



2.检测属性
使用 “in"
in 运算符希望它的左操作数是一个字符串或者可以转换为字符串,希望它的右操作数是一个对象
var data = [5,6,7];
console.log("0" in data); //有下标0
console.log(1 in data); //1可以转换成"1"
console.log("4" in data); //下标只有 1 2 3
var obj = {x:1};
console.log("x" in obj); //true
console.log("y" in obj); //false
console.log("toString" in obj); //true 因为obj继承了这个方法
使用hasOwnProperty()或者propertyIsEnumerable() --- 后者是前者的增强
方法用来检测给定的名字是否是对象的自有属性,继承性返回false
顾明思议
var obj = {x:1};console.log(obj.hasOwnProperty("x"));//trueconsole.log(obj.hasOwnProperty("y"));//falseconsole.log(obj.hasOwnProperty("toString"));//false 因为obj继承了这个方法,但不是它自己的
只有检测到是自由属性并是可枚举的属性时,后者才返回true
var obj = {x:1};console.log(obj.propertyIsEnumerable("x"));//trueconsole.log(obj.propertyIsEnumerable("y"));//falseconsole.log(obj.propertyIsEnumerable("toString"));//false 因为obj继承了这个方法,但不是它自己的console.log(Object.prototype.propertyIsEnumerable("toString"));//false 因为最原始的的 toString就是不可枚举的

当然,也可以直接用 ”!=="运算符判断
var obj = {x:1};console.log(obj.x !== undefined);//trueconsole.log(obj.y !== undefined);//falseconsole.log(obj.toString !== undefined); //true

3.枚举属性
var obj = {x:1,y:2};
for(p in obj){
console.log(p);//x y
console.log(obj.p);// undefined undefined
console.log(obj[p]);//1 2
}
原创粉丝点击