JS命名空间、对象枚举

313 阅读2分钟

命名空间

管理变量,防止污染全局,适用于模块开发。

多个人合作开发时,变量名就很可能会重复,这时就会导致许多问题,比如我的变量还没有使用就先被别人的覆盖了。

把特定的功能写到一个闭包里面,留出一个接口方便之后启动它。

var name = 'bcd';
var init = (function () {

	var name = 'abc';

	function callName(){
		console.log(name);
	}

	return function () {
		callName();
	}
}())

init();			//abc	
			//内部属性私有化,不会被覆盖

对象枚举

查看对象属性

程序在执行时会传入数据,我们并不知道对象的属性是什么,有多少。那么要怎样去查看它呢

  1. for in 循环
var obj = {
    name : 'sunny',
    age : 123,
    sex : "male";
    height : 180;
}

//实现对象的遍历
//'prop'这个名字是自己命名的

for(var prop in obj){
	console.log(prop);		//name   age   sex   height
    	console.log(obj.prop);		//undefined(*4)
    			//prop是字符串类型的,此时的obj.prop相当于obj['prop'],
                	//会将prop当作一个属性,而obj中没有这个属性,所以结果是undefined
    	console.log(obj[prop]);
}
  1. hasOwnProperty方法

    for in 循环会将所有的属性(自身的和原型上的)都打印出来,hasOwnProperty方法用来判断属性是自己的还是原型上的,返回值为布尔值。

for(var prop in obj) {
	if(obj.hasOwnProperty(prop)){
    	console.log(obj.[prop]);
    }
}    
  1. in

    判断属性是否存在在对象中,并且自身的和原型上的属性都判断为true,也就是判断此 属性能不能被这个对象访问。

  2. instanceof

    A instanceof B --> 判断A对象是不是B构造函数构造出来的(看A对象的原型链上有没有B的原型)



typeof([]) --> Object
typeof({}) --> Object

如果一个数据有可能是数组也有可能是对象,那怎样判断它的数据类型

三种方法