我对 JavaScript 语言的 OO 范式相当陌生(我来自 Java),并且我对这个特定情况下 this 参数的正确含义有以下疑问。
我有以下代码:
var obj = {
fn:function(a,b) {
log(this-);
}
}
好的,根据我的理解(如果我做错了断言,请纠正我),前面的代码定义了一个 ob 对象,其中包含一个名为 fn 的函数。
第一个疑问:这样做是我创建该对象的实例(在内存中创建)还是只是声明它(作为 Java 类)?
我认为我正在内存中创建该对象的特定实例,但我不确定......
好的,然后做:
obj.fn(3,4);
这里的this值是我调用fn()函数的特定obj对象(实例)的标识.
我的推理正确还是我遗漏了什么?
如果我不将 fn() 函数声明到对象定义中会发生什么?如果我直接将其放入 .js 文件中会发生什么? this关键字是否引用了全局对象?
最佳答案
第一个疑问:是的,您正在内存中创建一个对象
据我所知,至少有 3 条规则用于确定 this 关键字的值,所有这些规则都是根据调用函数的调用点确定的.
1) 默认绑定(bind):默认情况下,this 绑定(bind)到全局对象。
var a = 10; // declared in global scope
function foo(){
console.log(this.a); // 10
}
foo(); // callsite
2) 隐式绑定(bind):this 绑定(bind)到调用其方法的对象
var a = 10; // global
var obj = {
a : 20,
foo : function(){
console.log(this.a); // 20
}
}
obj.foo(); // callsite
3) 显式绑定(bind):this 绑定(bind)到您指定的任何对象。 有两种方法可以做到这一点,call() 和 apply()
var a = 10;
var obj = {
a : 20
};
function foo(){
console.log(this.a); // 20
};
foo.call(obj); // bind to obj
关于javascript - 在对象内部定义的函数中声明的 this 关键字究竟如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39350595/