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

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

js權威指南 this.add.apply(this.argments)。

js權威指南 this.add.apply(this.argments)。

largeQ 2018-11-23 19:14:59
在重看JS權威指南時,看到這么一段代碼 位于原書P217 (JS權威指南第六版,淘寶前端翻譯).function Set(){    this.values = {};    this.n = 0;    this.add.apply(this, arguments);}這里有一點疑惑,就是 this.add.apply(this, arguments); 這段代碼為什么要寫成這樣子。這樣難道不是更加簡潔么? this.add(arguments);this.***.(apply|call)(this,...)這樣的代碼難道不是和 this.*(...) 是一樣的效果么
查看完整描述

1 回答

?
MMTTMM

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

對于這個問題,this.add.apply(this, arguments);this.add(arguments);相同的點是在add函數里面的this指向是一樣的,不同的點是傳給add函數的參數是不一樣的,假設我們使用new Set(1, 2);那么arguments[1, 2],使用this.add.apply(this, arguments);調用add函數時其實相當于this.add(1, 2);此時add接收到的參數個數是2;而使用this.add(arguments)調用add函數時,相當于this.add([1, 2]);此時add收到的參數個數是1,參數是數組[1, 2]

Update1:

我覺得和不定參數還是有點兒關系的,比如說add函數的作用就是把傳給它的每個參數相加,我們想在Set函數里面計算傳給它的參數的總和,假設Set函數接收的參數也不固定,使用this.add.apply(this, arguments);是可以的,如果用this.add方法直接調用,因為Set接收的參數數目不固定,所以我們可能就得按照下面這么寫:

var len = arguments.length;

this.add(arguments[0], arguments[1], arguments[2], ..., arguments[len]);

但是因為len是一個不確定的數,我們沒法確定...的內容,所以沒有辦法通過this.add()這種直接調用的方式實現不定參數的調用。

Update2:

var len = arguments.length;

this.add(arguments[0], arguments[1], arguments[2], ..., arguments[len]);

在ES6之前是沒有辦法通過this.add()這種方法直接調用的,在ES6中可以通過解耦的方式調用this.add(...arguments),這個和this.add.apply(this, arguments);的效果是一樣的;
不固定指的是參數的數量。

查看完整回答
反對 回復 2018-12-31
  • 1 回答
  • 0 關注
  • 412 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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