在webkit中看到一段代码:class ExecState : public Register
{
JSValue calleeAsValue() const { return this[JSStack::Callee].jsValue(); }
...
}
其中JSStack::Callee是常量,不管是ExecState还是Register都没有对operator[]进行重载,所以想不明白this[JSStack::Callee]这样的用法是什么意思?
在webkit中看到一段代码:class ExecState : public Register
{
JSValue calleeAsValue() const { return this[JSStack::Callee].jsValue(); }
...
}
其中JSStack::Callee是常量,不管是ExecState还是Register都没有对operator[]进行重载,所以想不明白this[JSStack::Callee]这样的用法是什么意思?
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
这里跟
operator[]
的重载是没有关系的,因为this
是指向自己的指针,而*this
才是一个ExecState
实例。那么问题就是如何从C语言的层面进行理解。
this[JSStack::Callee]
其实是*(this + JSStack::Callee)
。虽然我没有了解过webkit的代码,但我猜测calleeAsValue()
的调用条件是这个实例在一个数组中(或许是一个用数组实现的栈?),这样那句代码才有意义。