阅读EcmaScript specification, section 8.7 The Reference Specification Type:
Reference
类型用于解释此类运算符的行为delete
,typeof
和赋值运算符。 [...]参考是一个已解析的名称绑定。允许函数调用返回引用。纯粹为了宿主对象而承认这种可能性。此规范未定义的内置ECMAScript函数返回引用,并且没有规定用户定义的函数返回引用。
最后两句话让我印象深刻。有了这个,你可以做coolHostFn() = value
(valid syntax,顺便说一句)之类的事情。所以我的问题是:
是否存在定义导致Reference
值的主机功能对象的EcmaScript实现?
答案 0 :(得分:6)
谷歌Chrome的引擎非常适合这种方式。但是,您会在控制台中注意到执行以下操作时会得到ReferenceError: Invalid left-hand side in assignment
:
var myObj = new Object();
function myFunc() {
myObj.test = "blah";
return myObj;
}
myFunc() = new String("foobar");
然而,这是一个早期错误,并且因为v8的ECMAScript实现,如果它在假定引用错误之前正确执行myFunc
,这应该可行。
那么,在v8的当前实现中?是和否。它默认实现(由于语言的结构),但是功能因不同的问题而停止。 coolHostFn() = value
不应该返回错误,并且确实应该能够正确执行。但是3=4
肯定会返回左侧分配错误。
不完全是你问题的答案,但我希望它有助于澄清为什么它不起作用。
(以下是问题/故障单,以防有人想要加入... http://code.google.com/p/v8/issues/detail?id=838)