亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么不能在原型函數中為“ this”分配新值?

為什么不能在原型函數中為“ this”分配新值?

料青山看我應如是 2019-12-04 12:34:13
我為什么可以這樣做: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我懷疑這是因為允許分配意味著我可以將數組更改為其他內容(例如字符串),但是我希望那里的人可以肯定并且/或者有更詳細的解釋。
查看完整描述

3 回答

?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

您正在將對象與引用混淆。


當您像[1,2,3]創建新數組一樣使用文字時,數組就是一個對象。


變量名稱(例如this或)a是對對象的引用。如果有幫助,可以將一個對象想象為一個人,將引用想象為其昵稱。您可以對同一對象有多個引用,例如:


var a = [1,2];

var b = a;

b.push(3);

alert(a.length); // Gives "3"

想象一下,如果您有一個名為Sarah的朋友。您有時也稱她為“ Ace”。如果Sarah有一天理發,那么Ace也會理發,因為“ Sarah”和“ Ace”是同一個人的不同名字。


如果您使用諸如a.push或a.splice(concat但是不是一個?。┲惖淖儺悢到M方法,則您將更改現有的Array對象,并且a仍然引用相同的對象。這就像剪頭發-您看起來可能有所不同,但您仍然是同一個人。


使用分配對新值的引用時a = [1,2,3],您將創建一個新數組,并更改a為引用它。這就像找到一個有著不同頭發的新朋友,然后決定給她打A牌一樣。


現在this是由Javascript生成的特殊名稱。它不是像Sarah這樣的名字,而是更多的標題,例如“ mother”。您的媽媽可以換個新發型,但是您不能換個新媽媽。同樣,您不能this從函數內部更改引用的內容。


查看完整回答
反對 回復 2019-12-04
  • 3 回答
  • 0 關注
  • 397 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號