Javascript 如何将this关键字声明为对象内部定义的函数?
我对JavaScript语言的OO范式非常陌生(我来自Java),我对thisparam在这种特定情况下的正确含义有以下疑问 我有以下代码:Javascript 如何将this关键字声明为对象内部定义的函数?,javascript,javascript-objects,Javascript,Javascript Objects,我对JavaScript语言的OO范式非常陌生(我来自Java),我对thisparam在这种特定情况下的正确含义有以下疑问 我有以下代码: var obj = { fn:function(a,b) { log(this-); } } 好的,据我所知(如果我做了错误的断言请纠正我),前面的代码定义了一个ob对象,其中包含一个名为fn的fnction 第一个疑问:这样做是在创建这个对象的实例(在内存中创建)还是只声明它(作为Java类) 我想我在内存中创建了这
var obj = {
fn:function(a,b) {
log(this-);
}
}
好的,据我所知(如果我做了错误的断言请纠正我),前面的代码定义了一个ob对象,其中包含一个名为fn的fnction
第一个疑问:这样做是在创建这个对象的实例(在内存中创建)还是只声明它(作为Java类)
我想我在内存中创建了这个对象的一个特定实例,但我不确定这个
好的,那么做:
obj.fn(3,4);
这里的this值是我调用fn()函数的特定obj对象(实例)的标识
是我的推理正确还是我遗漏了什么
如果我不在对象定义中声明fn()函数,会发生什么?如果我直接将其放入.js文件中会发生什么?这个关键字是否引用到全局对象?第一个疑问:是的,您正在内存中创建一个对象 据我所知,至少有3条规则用于确定this关键字的值,所有这些规则都是根据调用函数的调用站点来确定的 1) 默认绑定:默认情况下,它绑定到全局对象
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()
第一个疑问:是的,您正在内存中创建一个对象 据我所知,至少有3条规则用于确定this关键字的值,所有这些规则都是根据调用函数的调用站点来确定的 1) 默认绑定:默认情况下,它绑定到全局对象
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()
我认为你是对的。如果对象中没有声明
fn
,我相信这个
与拥有代码的函数有关,所以fn
就是这个。如果它不在函数中,this
将引用窗口
global,如果它在那里。用this
关键字在哪里声明函数并不重要,重要的是在obj.fn(…)中调用obj
。我认为您是正确的。如果对象中未声明fn
,我相信此
与拥有代码的函数相关,因此fn
就是此。如果它不在函数中,this
将引用窗口
global,如果它在那里。用this
关键字在哪里声明函数并不重要,重要的是在obj.fn(…)中调用obj
。还有一条规则可能重复-在函数调用之前使用new关键字。有很多,例如,您忘记了new
。另外,foo()
不会将此
绑定到全局对象,而是将其绑定到未定义的
-只有邋遢模式函数默认将其绑定到全局对象。在使用Javascript函数时,这指的是当前对象,具体取决于函数的上下文至少
拼写还有一条规则-在函数调用之前使用new关键字。例如,有很多规则你忘记了new
。另外,foo()
不会将此
绑定到全局对象,而是将其绑定到未定义的
-只有邋遢模式函数默认将其绑定到全局对象。在使用Javascript函数时,这指的是当前对象,具体取决于函数的上下文<代码>至少拼写