十三、对象属性遍历、this、caller\callee

十三、对象属性遍历、this、caller\callee

一、对象属性遍历

1.1 链式操作

问题:对象中有多个方法,想要在一个方法执行结束后,继续点语法调用下一个方法。

方式:在每个方法后面加上return this

解释:方法执行到最后一句,返回 this,而this指向对象,即返回对象;然后对象再用点语法调用方法,形成类似于链条的操作。

var sched = {
   
    wakeup: function(){
   
        console.log('Running');
        return this;
    },
    morning: function(){
   
        console.log('Go shopping');
        return this;
    },
    noon: function(){
   
        console.log('play basketball');
        return this;
    }
}

sched.wakeup().morning().noon();

链式操作

1.2 对象调用属性的两种方式

1.2.1 点语法
var obj = {
   
    name: 'white'
}
console.log(obj.name); //'white'
1.2.2 [‘属性名’]
var myLang = {
   
    No1: 'HTML',
    No2: 'CSS',
    No3: 'JavaScript',
    myStudyLang: function(num){
   
        console.log(this['No' + num])
    }
}
myLang.myStudyLang(3); //'JavaScript'

最早js引擎对对象的处理:obj[‘属性名’]。

有了点语法以后,js引擎把obj.属性名 隐式转换->obj[‘属性名’]再处理。

总结:当对象访问属性时,js引擎处理方式最终都会变成obj[‘属性名’]的形式

1.3 对象枚举

js中的枚举说的是对象枚举

js中说枚举->遍历,遍历:在一种信息内一个一个获得其信息的过程。

1.3.1 数组枚举

js中数组是特殊的对象,使用for循环遍历。

1.3.2 对象枚举

使用for in循环遍历

var car = {
   
    brand: 'benz',
    color: 'red',
    displacement: '3.0'
}
for(var i in car){
   
    console.log(i + ':' + car[i]);
}
console.log('-----------')
for(var key in car){
   
    console.log(key + ':' + car.key);
}

对象枚举

为什么在for in循环中使用对象.属性名获取的数据是undefined?

因为car中没有一个具体的属性叫key;

总结使用场景

  • .语法:当我们想要获取对象某个确定的属性时,会使用点语法+属性名的形式调用对象的属性。

  • []语法:当我们不确定对象的属性名,或者想要获取对象的所有属性时,可以用[key]的形式,这里的key是一个变量,代表可变的字符串,用这个可变的字符串去对象中寻找对应的属性。

js引擎的处理过程:

1.car.key ->这里的key是对象的具体属性key -> car[‘key’] 而对象中没有一个属性名为字符串’key’->得到undefined,字符串’key’是定值

2.car[key]->这里的key是全局声明的key,key值随着遍历在改变

var car = {
   
    brand: 'benz',
    color: 'red',
    displacement: '3.0',
    key: '字符串key'
}
for(var i in car){
   
    console.log(i + ':' + car[i]);
}
console.log('-----------')
for(var key in car){
   
    console.log(key + ':' + car.key);
}

对象枚举2

for in 能遍历数组吗? √

var arr = [1, 2, 3, 4, 5]
for(key in arr){
   
    console.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值