2011-03-01 70 views
6

我有一个JavaScript类:`this`指的是什么?

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

类之外,我有以下代码:

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

是什么this在上面的代码是指什么?它是指prototype,或到Person类?

回答

1

好,基础知识第一:当你写function Person(o) { ... },你是不是声明一类 - JavaScript没有类为主,但基于对象的。这个语句只是声明一个函数(顺便说一句,也是对象)。

接下来,当你创建一个这样的对象:

var mellon = new Person('Mellon'); 

你创建了一个对象,它的构造(各种)是Person

现在,请仔细阅读本:因为的构造是Person,在Person所有方法的prototype将于对象。

所以,如果你写:

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

那么方法mellon.shower()将可用。

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


因此,要回答你的问题:this是指与方法shower被调用的对象。在上述情况下,它将是。

1

它是指人

这样的情况下,当你做一个
var Mike = new Person();

那么这是迈克

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

将提醒的价值字段中的功能被分配给

1

它reffers到Person类

 
    var instance = new Person(...); 

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

的实例this含义取决于你如何通话的功能,而不是你如何定义它。

假设你做这样的事情:

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

然后thisbob(这将是Person一个实例)。

+0

+1,但要清楚的是,'this'指的是被调用之前的任何内容。如果没有'.'调用,那么'this'默认为'window' /'global'。 – 2011-03-01 10:41:45

+1

这可以通过用'function(){console.log(this)替换shower函数来证明。 }'。 – kim3er 2011-03-01 10:42:49

+0

@ Box9'this'指的是当前的上下文。 'this'默认情况下会引用'window'对象(在浏览器中)。上下文会随着您添加机箱/功能而发生变化。 – kim3er 2011-03-01 10:44:56

1

这指的是调用shower的对象。具体来说,您将最终结束了做

p = new Person(n); 

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

如果在p上调用,使用p.shower(),则this将返回到p。重点是,虽然没有JavaScript中的实例和类。 Person.prototype是一个对象,由Person构造的所有对象将共享对它的引用。

删除原型都在一起,你可以做

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

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

,你会看到,this仍然是指您在其调用该方法的对象。

相关问题