1. 程式人生 > >Javascript中call和apply的區別與詳解

Javascript中call和apply的區別與詳解

轉自:http://www.7old.com/jiaocheng/show-1412.html
在js中call和apply它們的作用都是將函式繫結到另外一個物件上去執行,兩者僅在定義引數方式有所區別,下面我來給大家介紹一下call和apply用法。

在web前端開發過程中,我們經常需要改變this指向,通常我們想到的就是用call方法,但是對於call的理解很多人不是很清晰,那麼下面小編就給大家詳細說一說call和apply的詳細知識

一、call方法的定義

大家在百度裡面可以搜尋call,關於call的定義都很拗口。在我的理解,a.call(b,arg1,arg2..)就是a物件的方法應用到b物件上。例如如下例子:

 程式碼如下 複製程式碼

function add(a,b)
{
alert(a+b);
}
function reduce(a,b)
{
alert(a-b);
}
add.call(reduce,1,3) //將add方法運用到reduce,結果為4

二、call可以改變this指向

如下例:

 程式碼如下 複製程式碼

function b()
{
alert(this)
}
b(); //window
b.call(); //window
b.call(“a”,2,3); //a

再看一個複雜的例子:

 程式碼如下 複製程式碼

function Animal()
{
this.name=”animal”;
this.showName=function()
{
alert(this.name)
}
}
function Cat()
{
this.name=”cat”;
}
var animal = new Animal();
var cat = new Cat();
animal.showName(); //結果為animal
animal.showName.call(cat); //原本cat沒有showName方法,但是通過call方法將animal的showName方法應用到cat上,因此結果為cat

三、實現繼承

如下例子:

 程式碼如下 複製程式碼

function Animal(name)
{
this.name=name;
this.showName=function()
{
alert(this.name)
}
}
function Cat(name)
{
Animal.call(this,name); //將Animal應用到Cat上,因此Cat擁有了Animal的所有屬性和方法
}
var cat = new Cat(“Black Cat”);
cat.showName(); //瀏覽器彈出Black Cat

四、apply用法

apply和call的用法只有一個地方不一樣,除此之外,其他地方基本一模一樣

a.call(b,arg1,arg2…)

apply(b,[arg1,arg2]) //apply只有2個引數,它將call的引數(arg1,arg2…)放在一個數組中作為apply的第二引數


相關推薦

javascriptcallapply、bind

組裝 div 分析 rgs 特性 類型 bind詳解 中修改 不支持 1.apply和call的區別在哪裏 2.什麽情況下用apply,什麽情況下用call 3.apply的其他巧妙用法(一般在什麽情況下可以使用apply) 我首先從網上查到關於apply和

Javascriptcallapply區別

轉自:http://www.7old.com/jiaocheng/show-1412.html在js中call和apply它們的作用都是將函式繫結到另外一個物件上去執行,兩者僅在定義引數方式有所區別,下面我來給大家介紹一下call和apply用法。 在web前端開發過程中

javascriptcall()apply()方法的區別

首先需要知道 call 和 apply 都是js 物件 prototype的方法 在使用的時候主要區別: var foo() = function(){ ....//程式碼段 } // foo.

JavaScriptcallapply方法的使用

acvaScript中的call()方法和apply()方法,在某些時候這兩個方法還確實是十分重要的。1. 每個函式都包含兩個非繼承而來的方法:call()方法和apply()方法。2. 相同點:這兩個方法的作用是一樣的。都是在特定的作用域中呼叫函式,等於設定函式體內this物件的值,以擴充函式賴以執行的作用

javascriptcallapply的模擬實現

call() call() 方法呼叫一個函式, 其具有一個指定的this值和分別地提供的引數(引數的列表)。 語法:fun.call(thisArg, arg1, arg2, ...) 例

整理JavaScriptCallApply區別

function classA() { this.name='bluedestiny'; this.show = function () { // alert(this.name); } } function classB(

JavaScript callapply

nbsp clas div 其余 color 接收 style pre ava call()方法和apply()方法的作用相同,他們的區別在於接收參數的方式不同。 對於call(),第一個參數是this值沒有變化,變化的是其余參數都直接傳遞給函數。(在使用call()方法時

Javascriptcallapplybind的區別以及原始碼解析

我們知道在javascript中call和apply以及bind都可以改變this指向,那麼它們是怎麼實現的呢?彼此之間有什麼區別呢?首先我們先來分別解析一下它們: (一)call 首先我們先來看一下如何使用call: var valu

【轉】 JavaScriptcall() apply()

定義 ECMAScript規範為所有函式都包含兩個方法(這兩個方法非繼承而來), call 和 apply 。這兩個函式都是在特定的作用域中呼叫函式,能改變函式的作用域,實際上是改變函式體內 this 的值 。 call 和 app

JavaScriptbind、callapply函式用法

在給我們專案組的其他程式介紹 js 的時候,我準備了很多的內容,但看起來效果不大,果然光講還是不行的,必須動手。前幾天有人問我關於程式碼裡 call() 函式的用法,我讓他去看書,這裡推薦用js 寫伺服器的程式猿看《javascript程式設計精粹》 這本書,crockfo

js的面試筆試--javascriptcall()、apply()、bind()方法的區別

在JavaScript 中,this的指向是動態變化的,很可能在寫程式的過程中,無意中破壞掉this的指向,所以我們需要一種可以把this的含義固定的技術,於是就有了call,apply 和bind這三個方法,來改變函式體內部 this 的指向,因為函式存在「定義時上下文」和

jscall()apply()的區別

JS中每個函式都包含兩個非繼承而來的方法:apply()和call()。這兩個方法都用於在特定的作用域中呼叫函式,即將一個函式繫結到另一個函式中,比如有兩個函式A和B,要在B函式中呼叫A函式,就需要用到這兩個方法,說白了就是設定函式體內this物件的值。    call

JavaScriptNullundefind區別

cdc 如何 undefine 只有一個 som pre cnblogs 定義 報錯 公眾號原文 Javascript有5種基本類型:Boolean,Number,Null,Undefined,String;和一種復雜類型:Object(對象); undef

javascriptcall()、apply()、bind()的用法

javascript中call()、apply()、bind()的用法 其實是一個很簡單的東西,認真看十分鐘就從一臉懵B 到完全 理解! 先看明白下面: 例1 obj.objAge; //17 obj.myFun() //小張年齡undefined 例2 show

javascriptcall()、apply()、bind()的用法理解

一、bind的用法 第一個:obj.showInfo('arg','arg_18');中傳的2個引數通過showInfo方法改變的是obj下中的name和age 第二個:obj.showInfo.bind(this)('bind','bind_18');中bind要傳的name和age是通過一個一個傳

javascriptcall()、apply()、bind()的用法終於理解

其實是一個很簡單的東西,認真看十分鐘就從一臉懵B 到完全 理解! 先看明白下面: 例 1 obj.objAge; // 17 obj.myFun() // 小張年齡 undefined 例 2 shows() // 盲僧  比較一下這兩者 this

裝箱拆箱的區別

深入剖析Java中的裝箱和拆箱   自動裝箱和拆箱問題是Java中一個老生常談的問題了,今天我們就來一些看一下裝箱和拆箱中的若干問題。本文先講述裝箱和拆箱最基本的東西,再來看一下面試筆試中經常遇到的與裝箱、拆箱相關的問題。   以下是本文的目錄大綱:

js call bind apply區別

call、apply、bind都是js中改變this的指向,但是使用起來不太一樣。 call(this,agrument1,agrument2) apply(this,[agrument1,agrum

JavaScript call()、 apply()、 bind()改變this指向理解

  最近開發的過程中遇到了this指向問題,首先想到的是call()、apply()、bind()三個方法,有些時候這三個方法確實是十分重要,現在我們就把他們的使用方法及異同點講解一下。   1、每個函式都包含三個非繼承而來的方法,call()方法、apply()方法和bind()方法   &nbs

js數組foEachmap的用法 jq的$.each$.map

cnblogs arr 對象 cal for index source asc 原生js 數組中foEach和map的用法詳解 相同點: 1.都是循環遍歷數組(僅僅是數組)中的每一項。 2.forEach() 和 map() 裏面每一次執行匿名函數都支持3個參數:數組中的