'this' 在原型方法中指向什么?

What does the 'this' point to in prototype method?

这个问题一度让我很困惑。这是一个简单的代码:

function A() {};

A.prototype.B=function() {return this};

A.prototype.B();

chrome 控制台中的结果是:

A{};
  >B: function() {};
  >constructor: function A() {};
  >  proto: Object

据我所知,'this'指向调用方法的对象。所以我觉得prototype方法中的'this'指向的是A.prototype(prototype也是对象对吧?)

我想知道 'this' 在原型方法中指向什么。 A 还是 A.prototype

结果中的A{}是什么?它和function A()有什么区别?

So I think the 'this' in the prototype method points to the 'A.prototype' (prototype is also an object, right?)

那个例子中,是的。但这是在原型上调用函数的一种极其不寻常的方式。如果您以更典型的方式调用它:

var a = new A();
a.B();

...那么 this 将是由 new A 创建的实例(a 指的是)。

I'm wondering what does the 'this' point to in the prototype method. The A or A.prototype?

在你的通话中,A.prototype。不过,您 可以 使其指向 A,使用 Function#callFunction#apply:

A.prototype.B.call(A);

...因为 this 在 JavaScript 中实际上是一个函数参数,可以在调用函数时设置。 (除了 "bound" 函数 [参见 Function#bind] 或 ES6 的新 "arrow" 函数,它们具有词法绑定 this。)

And what is the 'A{}' in the result?

这正是您使用的浏览器中的控制台表示该对象与 A 构造函数相关的方式。

如果你像这样实例化构造函数A

var myVariable = new A();

然后方法 B returns myVariable

的实例
myVariable.B() === myVariable // true

this refers to the object that called the function.

因此,无论您创建什么对象。如果该对象调用该函数,则 this 引用它。