在对象内部定义的函数中声明的this关键字究竟如何工作
How exactly work the this keyword declared into a function defined inside an object?
我是JavaScript语言中OO范式的新手(我来自Java),我对这个参数在这个特定情况下的正确含义有以下疑问。
我有以下代码:
var obj = {
fn:function(a,b) {
log(this-);
}
}
Ok,根据我的理解(如果我做了错误的断言,请纠正我),前面的代码定义了一个ob对象,该对象包含一个名为fn的函数。
第一个疑问:这样做是我创建这个对象的实例(在内存中创建)还是我只是声明它(作为Java类)?
我认为我正在内存中创建这个对象的特定实例,但我不确定这个…
好的,然后做:
obj.fn(3,4);
这里的this值是我调用fn()函数的特定obj对象(实例)的标识。
是我的推理正确还是我错过了什么?
如果我不将fn()函数声明为对象定义,会发生什么?如果我把它直接放到。js文件中会发生什么?this关键字是否指向全局对象?第一个疑问:是的,您正在内存中创建一个对象
我知道有至少 3条规则来确定this关键字的值,所有这些规则都是基于调用函数的调用站点来确定的。
1)默认绑定:默认情况下,这个绑定到全局对象。
var a = 10; // declared in global scope
function foo(){
console.log(this.a); // 10
}
foo(); // callsite
2)隐式绑定:this绑定到被调用方法的对象
var a = 10; // global
var obj = {
a : 20,
foo : function(){
console.log(this.a); // 20
}
}
obj.foo(); // callsite
显式绑定:这个绑定到你指定的任何对象。有两种方法可以做到这一点,call()和apply()
var a = 10;
var obj = {
a : 20
};
function foo(){
console.log(this.a); // 20
};
foo.call(obj); // bind to obj
相关文章:
- 运行时环境究竟是如何工作的
- 以下 Chrome 扩展程序 JavaScript 代码片段究竟是如何工作的
- (功能)原型究竟是如何工作的
- j查询事件已记录.它究竟是如何工作的
- FileWriter在javascript中究竟是什么工作的
- 删除究竟如何工作
- element.classList.contains() 在 JavaScript 中究竟是如何工作的
- JavaScipt的数据类型转换对于“==”运算符究竟是如何工作的
- done() 究竟是如何工作的,以及如何在 done() 中循环执行
- 这个AngularJS工厂示例究竟是如何工作的?有些疑虑
- LazyEvaluation的性能优势究竟从何而来
- AngularJS中的范围隔离概念究竟是如何工作的?我的推理正确吗
- 在JavaScript中的类中,push和concat的工作方式有何不同
- AngularJS摘要循环究竟是如何工作的
- 这个RegEx和替换在JavaScript中究竟是如何工作的
- 究竟如何getElementsByClassName工作在Chrome?,特别是w.r.t. NodeLists &;延
- JavaScript[]究竟是如何工作的?
- rails respond_to究竟是如何工作的
- 在对象内部定义的函数中声明的this关键字究竟如何工作
- 服务器发送的事件究竟是如何工作的