对于 Javascript 新手来说,这可能是一个典型的问题。我确实研究了许多类似的问题,但无法解释我所看到的行为。
下面的代码应该说明我正在尝试做的事情。我有 2 个对象 MyObjectA 和 MyObjectB。
MyObjectB 有一个echo
简单地记录消息的方法。它在消息前面加上前缀,this.name
试图知道谁在执行该方法。它还打印 的值this
。
MyObjectA 有一个名为的方法callAFunctionWithMessage
正是这样做的。它接受消息和函数并调用它。
在全局范围内,对象被实例化和调用。我看到的this.name
是undefined
。并且在浏览器中执行时this
具有价值DOMWindowObject
,并且在 nodejs 中执行时具有一些类似基础设施的大型对象。有人可以帮助我了解这种行为吗?鉴于 MyObjectA 正在调用 echo,我希望“this”指向 MyObjectA。
我也按预期执行指向 MyObjectB 的MyObjectB.echo('hello')
位置。this
function MyObjectA(name) {
this.name=name;
}
MyObjectA.prototype = {
name : "",
callAFunctionWithMessage: function (msg, callback) {
callback(msg);
}
}
function MyObjectB(name) {
this.name = name;
}
MyObjectB.prototype = {
name :"",
echo: function(msg) {
var messageToPrint='[from '+this.name+']'+msg;
console.log(messageToPrint, " : " + this);
}
}
var a = new MyObjectA("ObjA");
var b = new MyObjectB("objB");
a.callAFunctionWithMessage('hello from A!', b.echo);
// => [from result]hello from A! : [object Window]
b.echo('hello!');
// => [from objB]hello! : [object Object]