命名空间、对象枚举-学习笔记

命名空间问题

在这里插入图片描述
访问:
很麻烦

var jicheng = org.department1.jicheng;
jicheng.name;
通过立即执行函数解决命名空间问题

好处:形成闭包,私有化变量防止污染全局变量

     var name ="bcd";
        var init = (function(){
            var name = "abc";
            function callName(){
                console.log(name);
            }
            return function(){
                callName();
            }
        }())

要连续使用方法时返回this

  var deng = {
            smoke :function(){
                console.log("smoke");
                return this;
            },
            drink: function(){
                console.log("drink");
                return this;
            },
            perm : function(){
                console.log("perm");
                return this;
            }
        }
        deng.smoke().drink().perm();

obj.name -----> obj[‘name’]

        var deng = {
            wife1 : {name :"1sfdjn"},
            wife2 : {name :"2sfdjn"},
            wife3 : {name :"3sfdjn"},
            wife4 : {name :"4sfdjn"},
            sayWife : function(num){
                return this['wife'+ num];
            }
        }
对象枚举
    var obj = {
        name:'13',
        age:123,
        sex:'male',
        heght:180,
        weight:75,
        __proto__:{
            lastName:"deng"
        }
    }

有两种方式使用 in 操作符:

  1. 单独使用
    在单独使用时, in 操作符会在通过对象能够访问给定属性时返回 true,无论该属性存在于实例中还是原型中。
//in
    'name' in obj;
  1. for-in 循环中使用。可以用作对象枚举
alert(Person.prototype.isPrototypeOf(person1)); //true
alert(Person.prototype.isPrototypeOf(person2)); //true
//for in
//hasOwnProperty()
    for (var prop in obj){
        if(obj.hasOwnProperty(prop)){  //排除原型属性(自己手动设定的)
            console.log(prop+"  "+typeof(prop)+"   "+obj[prop]);
            //不能写为obj.prop 因为prop是string
        }
    }

补充:

  1. hasOwnProperty():使用 hasOwnProperty()方法可以检测一个属性是存在于实例中,还是存在于原型中。只在给定属性存在于对象实例中时,才会返回 true。

  2. isPrototypeOf():检测一个对象是否是另一个对象的原型。或者说一个对象是否被包含在另一个对象的原型链中

  3. hasOwnProperty和in配合使用来判断属性是否是在原型上

function hasPrototypeProperty(object, name){
return !object.hasOwnProperty(name) && (name in object);
}

由于 in 操作符只要通过对象能够访问到属性就返回 true, hasOwnProperty()只在属性存在于实例中时才返回 true,因此只要 in 操作符返回 true 而 hasOwnProperty()返回 false,就可以确定属性是原型中的属性。

instanceof

A instanceof B : A是不是B构造出来的
表示的意义是:A的对象上的原型连上 有没有 B的原型

区别对象的三种方法(区别数组和对象)
  1. constructor方法
    obj.constructor
    [].constructor
  2. instanceof 方法
    [] instanceof Array //true
    obj instanceof Array //false
    在这里插入图片描述
  3. toString方法
    在这里插入图片描述
    Object.prototype.toString.call([])
    Object.prototype.toString.call(123)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值