function makePerson(first, last) {
return {
first: first,
last: last,
fullName: function() {
return this.first + ' ' + this.last;
},
fullNameReversed: function() {
return this.last + ', ' + this.first;
}
}
}
s = makePerson("Simon", "Willison");
s.fullName(); // "Simon Willison"
s.fullNameReversed(); // Willison, Simon
上面的代码里有一些我们之前没有见过的东西:关键字 this
。当使用在函数中时,this
指代当前的对象,也就是调用了函数的对象。如果在一个对象上使用点或者方括号来访问属性或方法,这个对象就成了 this
。如果并没有使用“点”运算符调用某个对象,那么 this
将指向全局对象(global object)。这是一个经常出错的地方。例如:
s = makePerson("Simon", "Willison");
var fullName = s.fullName;
fullName(); // undefined undefined
当我们调用 fullName()
时,this
实际上是指向全局对象的,并没有名为 first
或 last
的全局变量,所以它们两个的返回值都会是 undefined
。
网友评论