美文网首页
11.命名空间,对象枚举

11.命名空间,对象枚举

作者: Sune小叶子 | 来源:发表于2018-02-06 23:41 被阅读0次

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

    小技巧:

    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.命名空间,对象枚举

          本文链接:https://www.haomeiwen.com/subject/ezynzxtx.html