gpt4 book ai didi

javascript - 在对象内部定义的函数中声明的 this 关键字究竟如何工作?

转载 作者:行者123 更新时间:2023-12-02 14:12:51 24 4
gpt4 key购买 nike

我对 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com