我有一个JavaScript类:
function Person(n){
// ...
}
在课堂之外,我有以下代码:
Person.prototype.shower = function(){ this.dirtFactor=2 }
上面代码中的this
是指什么?它是指prototype
还是Person
类?
答案 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
上查看是否在那里找到。
如果使用p
在p.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
的构造函数为Person
,Person
的{{1}}中的所有方法都将在对象中可用。
所以如果你写:
prototype
然后方法Person.prototype.shower = function(){ this.dirtFactor=2 }
将可用。
我建议通过Mozilla's intro to OOP in Javascript了解有关此主题的一些详细信息。
所以回答你的问题:mellon.shower()
指的是调用方法this
的对象。在上述情况下,它将是shower
。