gpt4 book ai didi

javascript - 为什么这是 javascript 的输出?

转载 作者:行者123 更新时间:2023-11-29 16:49:41 25 4
gpt4 key购买 nike

var name = 'bob';
var someObject = {
name: 'james',
someProperty: {
name: 'sam',
getName: function(){
return this.name;
}
}
}

var testing = someObject.someProperty.getName;

testing();

此代码块返回 'bob' 的原因是因为我们最终只是在全局对象名称上调用 this.name,即 'bob' 还是有更好的方法来考虑这个问题?谢谢!

最佳答案

The value of this is determined by how a function is called.

testing() 被调用为 window.testing() 因此 this 指的是 windowvar nameglobal(scope of window)下,返回"bob"

你可以使用ES5的[.call'(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call)指定this上下文来获取"sam"

call() 方法使用给定的 this 值调用函数

使用.bind()要在 function-body 中有指定的 this-reference 上下文,bind() 方法会创建一个新函数,当调用该函数时, 将其 this 关键字设置为提供的值,并在调用新函数时在任何提供的参数之前提供给定的参数序列。

var name = 'bob';
var someObject = {
name: 'james',
someProperty: {
name: 'sam',
getName: function() {
return this.name;
}
}
}

var testing = someObject.someProperty.getName;

console.log(testing()); //bob
console.log(testing.call(someObject)); //james
console.log(testing.call(someObject.someProperty)); //sam

console.log('------OR--------')

var testing = someObject.someProperty.getName.bind(someObject);
console.log(testing());
var testing = someObject.someProperty.getName.bind(someObject.someProperty);
console.log(testing());

关于javascript - 为什么这是 javascript 的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37383306/

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