![](/img/trans.png)
[英]Javascript arrow function lexical scope: object literal vs “new” operator
[英]Scope of callback function in "new" on JS object literal
在这段代码中,回调函数接收新Thing
对象的范围(如命令所示, Thing
被记录。)使用箭头函数会导致它记录 window 对象。
我希望能够访问该回调函数中literal
对象的范围,理想情况下不从全局对象中引用它。 有没有办法做到这一点?
function Thing(fun){
this.funThing = fun
}
let literal = {
thing: new Thing(function(){
console.log(this)
})
}
literal.thing.funThing() // Thing {funThing: ƒ}
您可以使用 getter 代替,这里的主要区别在于每次访问时都会重新创建事物,但是,您可以以不同的方式克服;)
是的,我在这里将其更改为箭头函数,但我也可以绑定回调函数
function Thing(fun){ this.funThing = fun } let literal = { get thing() { return new Thing(() => { console.log(this) }); } } literal.thing.funThing()
lcepickle 的解决方案工作正常。 另一种方法是将回调函数与文字对象绑定,但在这种情况下,您必须在调用new Thing
构造函数之前定义它。 因此,您可以在定义字面量对象之后添加thing
属性:
function Thing(fun){
this.funThing = fun
}
let literal = { }
literal.thing = new Thing(function(){
console.log(this)
}.bind(literal))
literal.thing.funThing()
您可以将匿名回调函数绑定到literal
对象的范围。
function Thing(fun){ this.funThing = fun } literal = { thing: new Thing(function(){ console.log(this) }.bind(this.literal)) } literal.thing.funThing()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.