上面的案例中为什么访问的是obj.sayHello的this而不是全局的
时间: 2024-02-20 17:02:37 浏览: 19
在上面的案例中,回调函数能够访问的是 `obj.sayHello` 方法中的 `this`,而不是全局对象的原因是因为箭头函数的特性。
箭头函数中的 `this` 始终指向函数定义时所在的作用域,而不是在运行时动态确定的。在上面的例子中,箭头函数被定义在 `obj.sayHello` 方法中,因此它的 `this` 指向的是 `obj` 对象。
如果使用普通的匿名函数,它的 `this` 将指向全局对象,因为 `setTimeout` 函数是在全局作用域中被调用的。为了让匿名函数能够访问 `obj` 对象中的属性,我们需要使用 `bind` 函数或者将 `this` 存储在一个变量中。例如:
```
const obj = {
name: 'Alice',
sayHello() {
const self = this;
setTimeout(function() {
console.log(`Hello, ${self.name}!`);
}.bind(this), 1000);
}
};
obj.sayHello(); // 输出:Hello, Alice!
```
在上述代码中,我们使用了 `bind` 函数来将匿名函数中的 `this` 绑定到 `obj` 对象上。如果不想使用 `bind` 函数,可以将 `this` 存储在一个变量中,然后在匿名函数中使用该变量。
相关问题
var obj = { sayHello:function(){ console.log(this); function test(){ console.log(this); } test(); } }; obj.sayHello(); obj.test();有什么问题
这段代码的问题在于 `obj.test()` 会报错,因为 `test()` 函数并没有在 `obj` 对象中定义,所以不能通过 `obj` 对象来调用它。另外,`test()` 函数中的 `this` 指向的是全局对象(浏览器中是 `window` 对象),而不是 `obj` 对象。如果想让 `test()` 函数中的 `this` 指向 `obj` 对象,可以使用箭头函数或者 `bind()` 方法来改变 `test()` 函数中的 `this` 指向。例如:
```
var obj = {
sayHello: function() {
console.log(this); // 输出 obj 对象
const test = () => {
console.log(this); // 输出 obj 对象
}
test();
}
};
obj.sayHello();
```
obj.set(obj.sData); c#中什么意思
在C#中,`obj.set(obj.sData)`这行代码是调用了`obj`对象的`set`方法,并将`obj.sData`作为参数传递给该方法。通常情况下,`set`方法用于设置对象的属性值。该行代码的作用是将`obj.sData`的值设置为`obj`对象的属性值。具体实现取决于`set`方法所在的类的具体实现。