我有一个JavaScript类:`this`指的是什么?
function Person(n){
// ...
}
类之外,我有以下代码:
Person.prototype.shower = function(){ this.dirtFactor=2 }
是什么this
在上面的代码是指什么?它是指prototype
,或到Person
类?
我有一个JavaScript类:`this`指的是什么?
function Person(n){
// ...
}
类之外,我有以下代码:
Person.prototype.shower = function(){ this.dirtFactor=2 }
是什么this
在上面的代码是指什么?它是指prototype
,或到Person
类?
好,基础知识第一:当你写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
被调用的对象。在上述情况下,它将是。
它是指人
这样的情况下,当你做一个
var Mike = new Person();
那么这是迈克
例
<input type="text" id="field" value="Bla" />
<script>
document.getElementById('field').onfocus=function() {
alert(this.value)
}
</script>
将提醒的价值字段中的功能被分配给
它reffers到Person类
var instance = new Person(...); instance.shower(); // Here will be this.dirtFactor assigned to instance.dirtFactor
的实例this
含义取决于你如何通话的功能,而不是你如何定义它。
假设你做这样的事情:
var bob = new Person('whatever n is');
bob.shower();
然后this
将bob
(这将是Person
一个实例)。
这指的是调用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
仍然是指您在其调用该方法的对象。
+1,但要清楚的是,'this'指的是被调用之前的任何内容。如果没有'.'调用,那么'this'默认为'window' /'global'。 – 2011-03-01 10:41:45
这可以通过用'function(){console.log(this)替换shower函数来证明。 }'。 – kim3er 2011-03-01 10:42:49
@ Box9'this'指的是当前的上下文。 'this'默认情况下会引用'window'对象(在浏览器中)。上下文会随着您添加机箱/功能而发生变化。 – kim3er 2011-03-01 10:44:56