访问对象属性的问题

来源:5-5 方法的调用

饭团团团团

2019-08-17 23:06:56

var op = {
key: function(num1,num2){
return num1*num2;
},
add: function(num1,num2){
return num1+num2;
}
}
key = 'add';    //  ‘add’ 不是字符串吗为什么代表了op对象里面的方法?为什么不用'.'或者[]就可以访问?    
console.log(key);  //   输出是字符串'add'
console.log(op[key]);   //  输出op对象的add函数
console.log(op['key']); //输出op对象的key函数
console.log(op['add']);      //输出op对象的add函数
console.log(op[key](1,2));  
console.log(op['key'](1,2));

    //为什么加引号是对象自身的属性,不加引号是全局的
    //为什么在全局作用域可以把'add'字符串赋值给key,并且key打印出来是字符串add,op对象访问就是函数可以调用了呢?

问题写注释里了,懵圈了

写回答

1回答

好帮手慕慕子

2019-08-18

同学你好, 

  1. 第一个打印的key是你在op对象之外定义的全局变量key

    http://img.mukewang.com/climg/5d58ed9d0001ea9e10120177.jpg

  2. 因为不加引号, key表示变量, 值为add, 加了引号之后表示字符串key

    http://img.mukewang.com/climg/5d58edcb0001e83008520152.jpg

  3. 因为op[key] 的写法等于op.add, 在op对象上有对应的add方法, 所以可以访问当op对象上的方法,然后就可以调用这个方法。

    假如你访问的是对象上没有的方法, 调用就会报错的

    http://img.mukewang.com/climg/5d58eec80001b01203160061.jpg

    http://img.mukewang.com/climg/5d58eed10001be7707220091.jpg

综上所述, 同学不用纠结,就记住.和[]都可以访问对象上的属性和方法, 但是[]可以通过变量定义的值来访问对象上的属性和方法哦

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~~

0

0 学习 · 14456 问题

查看课程