以前可以用
管理变量,防止污染全局,适用于模块化开发
var org={
department1:{
jiji:{
name:"sadf"
},
ab:{
}
},
department2 :{
jiji:{
},
sadf:{
}
}
}
var name=org.department1.jiji.name;
来解决,不过比较麻烦所以一般用立即执行函数,来返回函数,形成闭包
例如:
var name="小明";
var ko=function (){
var name="小白"
function hh(){
console.log(name)
}
return hh();
}();
链式调用
var deng={
smok : function (){
console.log("命名")
return this;
},
name : function(){
console.log("空间")
return this;
}
}
deng.smok().name();
另一种写法
每当obj.name---->会隐式转换成obj['name']
var deng={
wife1 : {name: "呵呵"},
wife2 : {name : "yse"},
wife3 : {name : "no"},
wife4 : {name : "mmmm"},
syanum : function (num){
return this['wife'+num];
}
}
console.log(deng.syanum(2).name.toString());
对象的枚举
for in
1.hasOwnProperty:判断是否有是原型上面的属性,如果是返回false,如果不是true
2.in :判断这个对象是否有这个属性
3.instanceof :A instanceof B A对象是不是B构造函数构造出来的 是则true
看A对象的原型链上 有没有 B的原型
区分方法
1 [].constructor
obj.constructor
- [] instanceof Array --->true
obj instanceof Array --->false - Object.protitype.toString.call([])--->Object Array
Object.prototype.toString.call(123)--->Object Number
Object.prototype.toString.call(obj)---->Object Object
var obj={
name : "小明",
kaixin : "我和吗",
__proto__ : {
lastName : "dneg"
}
}
Object.prototype.abc="123";
for (var key in obj){
// console.log(obj.key)
//不会打印系统定义的属性
if(!obj.hasOwnProperty(key)){//判断是否有是原型上面的属性,如果是返回false,如果不是true
console.log(obj[key])
//打印结果123 deng
}
}