'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#call
或 Function#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
引用它。
这个问题一度让我很困惑。这是一个简单的代码:
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#call
或 Function#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
引用它。