摘要:栗子通過實(shí)現(xiàn)繼承等同于栗子通過實(shí)現(xiàn)的展開運(yùn)算符功能寫法栗子通過擴(kuò)展作用域作用域在作用域在作用域在作用域在,對象冒充使用或來擴(kuò)充作用域的最大好處,就是對象不需要與方法有任何耦合關(guān)系。
call
call() 方法調(diào)用一個函數(shù), 其具有一個指定的this值和分別地提供的參數(shù)(參數(shù)的列表)。
apply
apply() 方法調(diào)用一個具有給定this值的函數(shù),以及作為一個數(shù)組(或類似數(shù)組對象)提供的參數(shù)。
兩者之間的區(qū)別
call()方法接受的是若干個參數(shù)的列表
apply()方法接受的是一個包含多個參數(shù)的數(shù)組。
栗子1:通過call實(shí)現(xiàn)繼承
function Product(name, price) { this.name = name; this.price = price; if (price < 0) { throw RangeError( "Cannot create product " + this.name + " with a negative price" ); } } function Food(name, price) { Product.call(this, name, price); this.category = "food"; } //等同于 function Food(name, price) { this.name = name; this.price = price; if (price < 0) { throw RangeError( "Cannot create product " + this.name + " with a negative price" ); } this.category = "food"; }
栗子2:通過apply實(shí)現(xiàn)ES6的展開運(yùn)算符功能
let values = [25, 50, 75, 100]; console.log(Math.max.apply(null, values)); //ES6寫法 console.log(Math.max(...values));
栗子3:通過call擴(kuò)展作用域
var color = "red"; let box = { color: "blue"; }; function sayColor() { alert(this.color); } sayColor(); //red,作用域在window sayColor.call(this); //red,作用域在window sayColor.call(window); //red,作用域在window sayColor.call(box); //blue,作用域在box,對象冒充
使用 call() (或 apply() )來擴(kuò)充作用域的最大好處,就是對象不需要與方法有任何耦合關(guān)系。
參考鏈接
Function.prototype.call()
Function.prototype.apply()
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/98486.html
摘要:前言這段時間突然發(fā)現(xiàn)原生好多東西都忘記了但有些東西確實(shí)很重要所以又重新再梳理一次。 showImg(https://segmentfault.com/img/bVbqqkr?w=874&h=382); 前言 這段時間突然發(fā)現(xiàn)JS原生好多東西都忘記了,但有些東西確實(shí)很重要,所以又重新再梳理一次。主要有函數(shù)的3種定義方法,ES5函數(shù)this指向,call與appl用法,JS常見的4種設(shè)計模...
摘要:第二行將函數(shù)的指向一個字符串第三行將函數(shù)的指向一個數(shù)字以此類推。再舉一個例子實(shí)現(xiàn)對象繼承繼承了的屬性和方法陳安東男姓名年齡性別輸出姓名陳安東年齡性別男這樣用就實(shí)現(xiàn)了繼承用也類似 這里排版不是太好,詳情看我的簡書 經(jīng)過網(wǎng)上的大量搜索,漸漸明白了apply()和call方法的使用,為此寫一篇文章記錄一下。 定義 apply()方法: Function.apply(obj,args)obj:...
摘要:參考鏈接在中,和是對象自帶的三個方法,都是為了改變函數(shù)體內(nèi)部的指向。返回值是函數(shù)方法不會立即執(zhí)行,而是返回一個改變了上下文后的函數(shù)。而原函數(shù)中的并沒有被改變,依舊指向全局對象。原因是,在中,多次是無效的。 參考鏈接:https://juejin.im/post/59bfe8... 在JavaScript中,call、apply和bind是Function對象自帶的三個方法,都是為了改變...
摘要:的使用場景作為構(gòu)造函數(shù)執(zhí)行作為對象屬性執(zhí)行作為普通函數(shù)執(zhí)行。要在執(zhí)行時才能確認(rèn)值,定義時無法確認(rèn)改變上下文指向。 1.this this的使用場景: 1.作為構(gòu)造函數(shù)執(zhí)行; 2.作為對象屬性執(zhí)行; 3.作為普通函數(shù)執(zhí)行; 4.call apply bind。 this要在執(zhí)行時才能確認(rèn)值,定義時無法確認(rèn) var a = { name:A, fn:function()...
摘要:的作用在中,方法和方法都是為了改變函數(shù)運(yùn)行時上下文而存在的,換句話說就是為了改變函數(shù)體內(nèi)部的指向。歡迎前端大牛糾正錯誤,如有錯誤我會及時改正。 寫在前面: 隔了很長時間了,也不知道寫點(diǎn)什么。最近一直在研究ES6,一直想寫出來的文章能對初學(xué)者或者是在學(xué)習(xí)JS路上有所幫助的。這就是我的初衷。 call、apply的作用 在JavaScript中,call()方法和apply()方法都是為了...
閱讀 3072·2021-10-11 10:58
閱讀 1989·2021-09-24 09:47
閱讀 503·2019-08-30 14:19
閱讀 1684·2019-08-30 13:58
閱讀 1444·2019-08-29 15:26
閱讀 641·2019-08-26 13:45
閱讀 2139·2019-08-26 11:53
閱讀 1772·2019-08-26 11:30