【发布时间】:2013-10-09 16:17:56
【问题描述】:
我正在学习 javascript,但遇到了疑问。为什么“this”的值在第一个示例中未定义,但在第二个示例中正确打印出来。
示例 1:
var myNamespace = {
myObject: {
sayHello: function() {
console.log( "name is " + this.myName );
},
myName: "john"
}
};
var hello = myNamespace.myObject.sayHello;
hello(); // "name is undefined"
示例 2:
var myNamespace = {
myObject: {
sayHello: function() {
console.log( "Hi! My name is " + this.myName );
},
myName: "Rebecca"
}
};
var obj = myNamespace.myObject;
obj.sayHello();//"Hi! My name is Rebecca"
为什么“this”的值在函数中会发生变化。我错过了什么概念?
【问题讨论】:
-
你的期望很好,JavaScript 的
this语义被破坏了。 :-) -
它是javascript而不是“java script”..非常非常大的区别..:)
-
基本上,问题在于,在 Javascript 中,
this在您访问对象中的方法时没有绑定(例如在 Python 中),但只有在您调用它时才绑定。所以它实际上是“实际方法调用表达式中.左侧的对象”。在您的第二个示例中,即obj,在您的第一个示例中,您没有使用点语法调用该方法,所以它什么都不是。 (您还可以通过使用Function.bind()或使用Function.call()和Function.apply()来选择this的值,只是为了让事情变得更复杂。jQuery 普遍这样做。) -
1个例子,hello是函数,2个例子hello是对象myObject;函数 sayHello 没有定义 myName,而 myObject 有
标签: javascript this