在webkit中看到一段代码:class ExecState : public Register
{
JSValue calleeAsValue() const { return this[JSStack::Callee].jsValue(); }
...
}
其中JSStack::Callee是常量,不管是ExecState还是Register都没有对operator[]进行重载,所以想不明白this[JSStack::Callee]这样的用法是什么意思?
伊谢尔伦2017-04-17 11:34:46
這裡跟operator[]
的重載是沒有關係的,因為this
是指向自己的指針,而*this
才是一個ExecState
實例。
那麼問題就是如何從C語言的層次來理解。 this[JSStack::Callee]
其實是*(this + JSStack::Callee)
。雖然我沒有了解webkit的程式碼,但我猜測calleeAsValue()
的呼叫條件是這個實例在一個陣列中(或許是一個用陣列實現的堆疊?),這樣那句程式碼才有意義。