我在JavaScript语言的OO范例中很新(我来自Java),并且在这个特定情况下,我对这个 param的正确含义有以下疑问。
我有以下代码:
var obj = {
fn:function(a,b) {
log(this-);
}
}
好的,根据我的理解(如果我做错了断言,请纠正我)前面的代码定义了一个 ob 对象,其中包含一个名为 fn 的函数。
首先怀疑:以这种方式做我是在创建这个对象的实例(在内存中创建)还是我只是声明它(作为Java类)?
我认为我在内存中创建了这个对象的特定实例,但我不确定这个......
好的,然后做:
obj.fn(3,4);
这里这个值是我在调用 fn()函数的特定 obj 对象(实例)的标识
我的推理是正确还是我错过了什么?
如果我没有将 fn()函数声明为对象定义,会发生什么?如果我将它直接放入.js文件中会发生什么? 此关键字是否已归为全局对象?
答案 0 :(得分:2)
首先怀疑:是的,你是在内存中创建一个对象
我知道至少 3个规则用于确定此关键字的值,所有这些规则都是根据调用函数的调用地点确定的
1)默认绑定:默认情况下, this 绑定到全局对象。
var a = 10; // declared in global scope
function foo(){
console.log(this.a); // 10
}
foo(); // callsite
2)隐式绑定:此绑定到调用其方法的对象
var a = 10; // global
var obj = {
a : 20,
foo : function(){
console.log(this.a); // 20
}
}
obj.foo(); // callsite
3)显式绑定:此绑定到您指定的任何对象。 有两种方法可以做到这一点,call()和apply()
var a = 10;
var obj = {
a : 20
};
function foo(){
console.log(this.a); // 20
};
foo.call(obj); // bind to obj