“this”是指什么?

时间:2011-03-01 10:37:05

标签: javascript

我有一个JavaScript类:

function Person(n){
  // ...
}

在课堂之外,我有以下代码:

Person.prototype.shower = function(){ this.dirtFactor=2 }

上面代码中的this是指什么?它是指prototype还是Person类?

5 个答案:

答案 0 :(得分:4)

this的含义取决于您调用函数的方式,而不是您如何定义它。

假设你做了类似的事情:

var bob = new Person('whatever n is');
bob.shower();

然后this将是bob(这将是Person的一个实例。)

答案 1 :(得分:1)

它指的是人的实例

所以当你做一个 var Mike = new Person();

然后这是迈克

实施例

<input type="text" id="field" value="Bla" />
<script>
document.getElementById('field').onfocus=function() { 
  alert(this.value)
}
</script>

将警告该功能分配给

的字段的值

答案 2 :(得分:1)

它指的是Person类的实例

   var instance = new Person( ... );

   instance.shower(); // Here will be this.dirtFactor assigned to instance.dirtFactor

答案 3 :(得分:1)

这指的是调用shower的对象。具体来说,你最终会完成

 p = new Person(n);

这将执行Person函数并创建一个新的空对象,该对象在构造函数中可以作为this访问。然后,该对象将被赋予Person.prototype的链接,p上失败的任何属性引用将在Person.prototype上查看是否在那里找到。

如果使用pp.shower()上调用,则this将返回p。关键是javascript中没有实例和类。 Person.prototype是一个对象,Person构造的所有对象都将共享对它的引用。

一起删除原型,你可以做到

 person = {'shower': function () { 
     this.dirtFactor = 2; }
 }

 person.shower();
 console.log(person.dirtFactor);

您将看到this仍然引用您调用该方法的对象。

答案 4 :(得分:1)

好的,首先是基础:当你写function Person(o) { ... }时,你声明一个类 - JavaScript不是基于类的,而是基于对象的。该语句只是声明一个函数(顺便提一下,它也是对象)。

接下来,当您创建这样的对象时:

var mellon = new Person('Mellon');

您正在创建一个对象,其构造函数(各种)为Person

现在,请仔细阅读:由于mellon的构造函数为PersonPerson的{​​{1}}中的所有方法都将在对象中可用。

所以如果你写:

prototype

然后方法Person.prototype.shower = function(){ this.dirtFactor=2 } 将可用。

我建议通过Mozilla's intro to OOP in Javascript了解有关此主题的一些详细信息。


所以回答你的问题:mellon.shower()指的是调用方法this的对象。在上述情况下,它将是shower