The answer depends on what this
refers to in each context. In JavaScript, this
is bound to whatever object was on the left of the dot (.) when the current function was called. If we're not in a function, things get a little hairier -- this
is either the global window
object or undefined
, depending on the environment.
In your first example, the value of this
is dependent on the surrounding context. As JavaScript builds your object a
, it evaluates this.b
. Whatever object this
is currently bound to has no b
property, so the c
property is set to undefined
.
In your second example, when you call funcObj.c()
the this
in the function gets bound to funcObj
. So, when you ask for the b
property, you get the b
you defined above. The fact that funcObj.b
is a function is actually irrelevant. The following would work just as well:
var funcObj = {
b : 1,
c: function() {
console.log(return this.b)
}
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…