javascript函数和这个关键字context
javascript functions and this keyword, context
这是代码
obj = {
a: 'some value';
m: function(){
alert(this.a);
}
}
obj.m();
结果是'some value'
。
我听说这个关键字指的是函数的所有者是obj
。现在的问题是,上面代码中函数的所有者是obj
,那么当函数拥有上面代码应该拥有的所有者时,为什么使用这个关键字很重要以以下方式工作
obj = {
a: 'some value';
m: function(){
alert(a);
}
}
obj.m();
我知道这不起作用,但为什么?
a
在函数m
的作用域中不可用。
a
是对象obj
的属性,并且在obj
的上下文中仅作为obj.a
或this.a
可用。
由于obj.m()
在a
的上下文中执行m
,因此可以使用函数m
中的this.a
访问a
。
在JavaScript中,必须使用this
。
在Java或C++等其他语言中,this
的使用是可选的。如果Java/C++中没有本地变量,但JavaScript中没有,x
会自动解析为this.x
。
当你说哪个对象"拥有"一个函数时,我觉得你有点困惑。"this"关键字就像一个变量,指向调用函数的任何对象。
例如,您可以编写这样的函数:
函数logThis(){console.log(this.a);}
现在,您可以制作两个不同的对象:
var objOne={a: "我是一个存储在密钥a的字符串",func:logThis}
var objTwo={func:log此}
请注意,这两个对象都有一个名为"func"的键,该键存储的是"logThis"函数。这意味着objOne.func与objTwo.func相同;它们都与logThis(){console.log(this.a)}相同
现在,如果您调用objOne.func(),它将记录"我是存储在键a处的字符串",调用func的对象是objOne,这是存储在objOne.a处的字符串
相反,如果调用objTwo.func(),则会得到"undefined"。这是因为objTwo是调用func的对象,而objTwo没有任何名为a的属性。
- 使用“;这个“;JavaScript原型方法中的关键字
- delete关键字在全局变量上的不同行为
- JavaScript 中的嵌套函数和 “this” 关键字
- 如何在不使用 new 关键字的情况下从函数创建对象
- Angularjs使用“;这个“;promise内的关键字回调
- 重写需要javascript中带有import关键字的语法
- Regex,用于从字符串中筛选关键字
- Javascript 对象和 this 关键字
- 如何在不知道关键字的情况下访问javascript对象值
- 可以在Javascript中添加新的关键字吗
- javascript中的这个关键字
- Javascript关键字搜索子类Div值
- 在对象中用Javascript编写此关键字
- 在构建字典时,作为关键字的变量会自动变为字符串
- 正则表达式,从一组关键字中获取奇数
- 当在文本框中搜索关键字时,我会得到以前的结果作为输出
- 在UltraEdit中搜索关键字
- 查找关键字并创建新对象
- 如果我没有在回调中使用' this '关键字,我应该使用可选的context参数吗?
- javascript函数和这个关键字context