在下面的例子中,我试图调用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
Javascript的一个重要方面是如何this
工作。
执行时
x.foo()
发生的事情是,在输入foo
特殊值的代码之前,已将this
对象设置为对象x
。举例来说:
let f = x.foo;
f();
是不一样的,因为在this
输入的代码时,此处将被设置为全局对象foo
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句