我为什么可以这样做:
Array.prototype.foo = function() { this.splice(0, this.length); return this.concat([1,2,3]); }
但是我不能这样做:
Array.prototype.foo = function() { return this = [1,2,3]; }
这两个函数都破坏了this的值并将其更改为,[1,2,3]但是第二个函数抛出以下错误:Uncaught ReferenceError: Invalid left-hand side in assignment
[1,2,3]
Uncaught ReferenceError: Invalid left-hand side in assignment
我怀疑这是因为允许分配意味着我可以将数组更改为其他内容(例如字符串),但是我希望那里的人可以肯定并且/或者有更详细的解释。
不允许this在函数内分配值。假设您 可以 执行此操作,并且您的代码如下所示:
this
Array.prototype.foo = function() { return this = [1, 2, 3]; } var a = ["beans", "rice"]; a.foo(); // a now points to an object containing [1, 2, 3]
现在,如果您这样做:
var a = ["beans", "rice"]; var b = a; // b refers to the same object as a b.foo(); // what does b refer to now? how about a?
.foo()在对象上调用函数的行为不应更改对象的 身份 。如果b突然开始引用一个不同的对象而不是a仅仅因为调用了某种方法,这对于调用者来说将非常混乱。
.foo()
b
a