javascript - 为什么在定义了一些从对象到变量上下文的方法后丢失了?

标签 javascript class-constructors

请帮忙解答 我不明白为什么上下文在定义后丢失

    class A {
    	func() {
    		console.log(this)
    	}
    }
    
    let a = new A();
    let b = a.func;
    b();

最佳答案

可以引用this为了澄清你的疑问。

如果您在对象上调用一个函数,javascript 将该对象视为它的 this/context,就很简单了。

例如。

let obj = {
   key : 'value',
   fun : function(){

   }
}
// if called like obj.fun() --> obj is going to be this
// if called like let ffun = obj.fun; ffun();  ---> window/global object is going to be this

如果您使用 call/apply/bind 调用该方法,您需要将自定义上下文指定为这些方法的第一个参数。

//if call like obj.fun.call(someObject, p1, p2)
// Or obj.fun.apply(someObject, [p1, p2])
// Or let ffun = obj.fun.bind(someObject, [p1, p2]);   ffun();
// someObject is going to be this in all these 3 cases

否则在直接调用函数的情况下,它会将窗口/全局对象作为其上下文。

关于javascript - 为什么在定义了一些从对象到变量上下文的方法后丢失了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56258912/

相关文章:

javascript - 使用输入 jQuery 的 .value() 计算

javascript - 增量变量超过 1?

javascript - AJAX更新微帖子上/下投票部分仅刷新最新帖子

javascript - 动画 SVG 多边形

javascript - 创建自动滑动div的水平列表

c# - 为什么我被迫在未使用的构造函数中引用类型?

c++ - 如何编写两个初始化操作(一个作为默认初始化,另一个作为用户输入)?两者都是 C++ 中类的构造函数

java - 难以理解构造函数以及在另一个类中调用它们的原因

delphi - 在类构造函数中完成类注册后,不调用类构造函数

python - Python 3 中默认的 `` `__new_ _`` ` 是什么?