对象
目录1. 对象的声明与定义
-
显式声明对象并逐个定义属性
var obj = new Object(); //定义&修改属性 obj.name = "Jack"; obj.age = 18; //定义函数 obj.fun = function(){ alert("姓名:" + this.name + ",年龄:" + this.age); } //调用属性 alert(obj.age); //调用函数 obj.fun(); //删除属性 delete obj.name;
-
使用匿名对象声明并定义对象
var obj = { name:"Jack", age:18, fun:function(){ alert("姓名:" + this.name + ",年龄:" + this.age); } }; alert(obj.age); obj.fun(); delete obj.name;
2. 原型对象
-
对于所创建的每一个函数,解析器都会向函数中添加一个属性prototype,这个属性所以对应的就是原型对象
-
如果函数作为普通函数调用prototype,不会有任何作用
但当函数以构造函数的形式调用时,它所创建的对象中都会有一个隐含的属性。这个属性指向该构造函数的原型对象,我可以通过
__proto__
来访问该属性 -
原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问这个原型对象,可以将对象中共有的内容,统一设置到原型对象中
以后创建构造函数时,可以将这些对象共有的属性和方法,统一添加到构造函数的原型对象中,这样就可以在不影响到全局作用域的情况下,使每个对象都具有这些属性和方法
Person.prototype.name = "jack"; Person.prototype.age = "18"; Person.prototype.gender = "female"; Person.prototype.sayName = function(){ alert("hi," + this.name); };
3. 枚举对象中属性
特殊属性值
-
特殊属性值能以一种更加灵活的的方法定义与调用属性:
定义:
对象["属性名"] = 属性值
调用:
对象["属性名"]
var obj = new Object(); obj["123"] = 789; console.log(obj["123"]);
in 运算符
-
通过该运算符可以检查一个对象中是否含有指定的属性,有则返回true,反之返回false
如果对象中没有但是原型中有也会返回true
语法:
"属性名" in 对象
console.log("test2" in obj);
hasOwnProperty方法
-
也可以使用该方法检查对象自身中是否含有该属性,此方法不受原型对象影响
console.log(mc.hasOwnProperty("age"));
for...in 语句
-
枚举对象中的属性,循环次数由属性数量决定,每次执行时会将对象中的一个属性的名字赋值给变量
该语句需结合in运算符和特殊属性值使用
语法:
for(var 变量 in 对象){}
for(var n in obj){ console.log("属性名:" + n); console.log("属性值:" + obj[n]); }