为什么在此JavaScript示例中调用相同方法会有不同的输出?

Aaditya Sharma

在下面的例子中,我试图调用Animal类的方法speak(),并eat()在4种不同的方式,和他们返回不同的结果:

这是示例:

class Animal { 
  speak() {
    console.log(this);
    return this;
  }
  static eat() {
    console.log(this);
    return this;
  }
}

//scenario #1
let obj = new Animal();
obj.speak(); // Animal {}

//scenario #2
let speak = obj.speak;
speak(); // undefined

//scenario #3
Animal.eat() // class Animal

//scenario #4
let eat = Animal.eat;
eat(); // undefined

有人可以解释一下在这4种情况下调用相同的方法(speak()eat()时为什么会有不同的结果吗?

输出: 输出量

方案1: 打印:{}

let obj = new Animal();
obj.speak(); // Prints: {}

方案2: 打印:undefined

let speak = obj.speak;
speak(); // Prints: undefined

场景3: 印刷品:的类定义Animal Class

Animal.eat() // prints: Class definition of Animal Class

方案4: 打印:undefined

let eat = Animal.eat;
eat(); // Prints: undefined
6502

Javascript的一个重要方面是如何this工作。

执行时

 x.foo()

发生的事情是,在输入foo特殊值的代码之前,已将this对象设置为对象x举例来说:

 let f = x.foo;
 f();

是不一样的,因为在this输入的代码时,此处将被设置为全局对象foo

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在此示例中Map会有return语句?

为什么在C#中定义属性的两种方法会有不同的结果?

为什么两个函数给出具有相同方法的不同输出?

为什么这两种获取布尔值的方法会有不同的结果?

为什么会有两个功能完全相同?为什么在Kotlin中必须以不同的方式调用?

为什么解决冲突的不同方法会导致不同的冲突?

为什么不同JS对象中的my方法会产生相同的结果?

为什么同一对象的不同方法具有相同的“ id”?

为什么这些算法会有所不同?

为什么在Web和Node.js上运行JavaScript会有不同的输出?

为什么从numpy到OS会有不同的asinh输出?

如果使用相同的种子,引导方法的结果为什么会有所不同?

Java:在 ConcurrentHashMap 中,如果我更改密钥,为什么会有不同的输出

为什么在此示例中,“ grep”的行为有所不同?

为什么这两个对addEventListener的javascript调用会有不同的结果

为什么在此示例中需要对变量调用detach?

为什么在此示例中调用哈希码?

为什么在此示例中调用了复制构造函数?

为什么在此示例中,调用(f arg)和显式调用f的主体会产生不同的结果?

tensorflow - 为什么在度量函数中调用数组时会有所不同?

在 Java 8 中设计/处理不同方法的有序调用的最佳方法是什么

为什么相同的代码在不同的集合合成方法中会有所不同?

为什么在此javascript示例中引用窗口对象?

为什么在此示例中参数b具有类型a?

为什么Javascript EventLoop会有不同的结果?

在以下javascript代码中,for循环中为什么会有6个不同的变量?

在此示例中,为什么“收益率”和“收益率收益率”具有相同的行为?

为什么输出会有所不同?为什么数据可以自行更改?

Three.js“射线广播点”示例–为什么会有不同类型的点云?