这个'这是什么?在原型方法中指向?

时间:2015-05-25 08:20:37

标签: javascript prototype this

这个问题困扰了我一段时间。这是一个简单的代码:

update t1
    set t1.country = t2.country
    from table t1
    inner join table t2
    on t1.Name = t2.Name and t2.published = 1
    where t1.published = 0

chrome控制台的结果是:

function A() {};

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

A.prototype.B();

据我所知,'这个'指向调用该方法的对象。所以我认为这个'这个'在原型方法中指向A{}; >B: function() {}; >constructor: function A() {}; > proto: Object (原型也是一个对象,对吧?)。

我想知道'这个'指向原型方法。 A.prototypeA

结果中A.prototype是什么?它与A{}之间有什么区别?

3 个答案:

答案 0 :(得分:1)

  

所以我认为原型方法中的'this'指向'A.prototype'(原型也是一个对象,对吗?)

该示例中,是的。但这是在原型上调用函数的一种非常不寻常的方式。如果你以一种更典型的方式调用它:

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

...然后this将是由new A创建的实例(a引用的)。

  

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

在通话中A.prototype。您可以指向A而不是Function#callFunction#apply

A.prototype.B.call(A);

...因为this在JavaScript中实际上是一个函数参数,可以在调用函数时设置。 (除了“绑定”函数[请参阅Function#bind]或ES6的新“箭头”函数,它们具有词汇绑定this。)

  

结果中的'A {}'是什么?

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

答案 1 :(得分:0)

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

var myVariable = new A();

然后方法B返回myVariable

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

答案 2 :(得分:0)

  

this指的是调用函数的对象。

所以无论你创建什么对象。如果该对象调用该函数,则this引用该函数。