11.命名空间,对象枚举

命名空间的作用:管理变量,防止全局污染,适用于模块化开发,闭包的变量私有化就是一个很好的处理命名空间的问题.

小技巧:

1.方法的连续调用,类同jQuery里面的连续调用:

var preson= {

    name : function(){

        console.log("name")

        return this;

    },

    age: function(){

        console.log("age");

        return this;

    },

     sex: function(){

        console.log("sex");

        return this;

    },

}

preson.name().age().sex();

2.属性表示方法obj.prop--> obj['prop']在浏览器内部会有这样子隐式的转换

用在属性拼接,比如on+click on+mousedown

var presons = {

preson1 : {name : 'xiaoxiao'},

preson2 : {name : 'dada'},

preson3 : {name : 'laolao'},

call: function(num){

    return this[ ' preson ' + num]; //注意字符串+什么都等于字符串

}

}

preson.call(1);

3.对象的枚举

for in

1.hasOwnProperty该方法用来判断这个属性是不是对象自己的,返回值是布尔值

2.in操作符,不论是原型上的属性还是对象本身具有的属性,只要存在就返回true

3.instanceof

var obj = {

name : 'xiao',

age : 18,

sex : man,

__proto__ : {

    lastName: 'sun'

}

}

for ( var key in obj){

    console.log(obj.key);   //obj.key --> obj['key']  -->undefined

    console.log(obj[key]); //打印的就是属性的值

    console.log(key); //打印的是属性名,typeof是字符串

1.hasOwnPrototype判断属不属于对象本身,一般用来过滤,得到不是原型上的属性

    if(obj.hasOwnPrototype(key)){

        console.log(obj[key]);

    }

}

2.in 不管是对象本身还是原型链上的,只要有就遍历

"sex" in obj -->true

"lastNme" in obj -->true

3.instanceof的用法

A  instanceof B 官方解释用来判断A对象是不是构造函数B构造出来的,但是当打印下列结果,会发现很牵强,这样的说法,所以,真正来说应该是:看A对象的原型链上有没有B的原型

function Preson(){}

var preson = new Preson();

preson instanceof Preson -->true -->显然原型链第一个就是Preson

但是preson instanceof Object -->true --> 原型链末端就是Object

[] instanceof Array -->true

[] instanceof Object -->true

所以如何区分一个变量是数组还是对象的方法有:

var arr = [];

var obj = {};

arr.constuctor-->function Array(){}

obj.constuctor -->function Object(){}

arr instanceof Array -->true

obj instanceof Array -->fales

Object.prototype.toString.call([])-->"[Object Array]"

Object.prototype.toString.call(123)-->"[Object Number]"

Object.prototype.toString = function(){

//识别this,但是当toString的点前面的对象调用该方法时,这个this就指向这个点前面的对象

//返回识别的结果

}

var obj = {}

obj.toString();

所以上面的通过call改变了this的指向.从而判断对象类型.

你可能感兴趣的:(11.命名空间,对象枚举)