第 38 題:apply、call 和 bind 是什麼?哪些區別?
三者都是改變 this 指向的 api
用法
apply:xxx.apply(this, [arg1, arg2])
call:xxx.call(this, arg1, arg2)
bind:xxx.bind(this, arg1, arg2)
區別
主要是傳參方式和執行方式不同
-
apply、call 的區別:接受引數的方式不一樣
-
bind:不立即執行。而 apply、call 立即執行
栗子
初始狀態
let Person = function(name, age) {
this.name = name;
this.age = age;
};
let Student = function() {
this.class = 'classA';
this.run = function() {
console.log(this);
};
};
let student = new Student();
student.run();
可以看見這個時候列印的 this 是指向 Student 建構函式,並且和 Person 建構函式沒有任何關聯
使用 apply 改變 this 指向
let Person = function(name, age) {
this.name = name;
this.age = age;
};
let Student = function() {
this.class = 'classA';
this.run = function() {
Person.apply(this, ['xiaoming', 20]);
console.log(this);
};
};
let student = new Student();
student.run();
這個時候 this 已經指向了 Person 建構函式了
使用 call 改變 this 指向
let Person = function(name, age) {
this.name = name;
this.age = age;
};
let Student = function() {
this.class = 'classA';
this.run = function() {
Person.call(this, 'xiaoming', 20);
console.log(this);
};
};
let student = new Student();
student.run();
這個時候 this 已經指向了 Person 建構函式了
使用 bind 改變 this 指向
let ex = '';
let Person = function(name, age) {
this.name = name;
this.age = age;
};
let Student = function() {
this.class = 'classA';
this.run = function() {
ex = Person.bind(this, 'xiaoming', 20);
console.log(this);
};
};
let student = new Student();
student.run();
ex();
使用 bind 的話,需要執行了 this 改變才會生效
總結:使用 apply、call 和 bind 確實可以改變 this 指向,但是原有物件的屬性也跟著一起過去了
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2894/viewspace-2797333/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- call,apply和bind的區別APP
- call、apply、bind 區別APP
- call apply bind區別APP
- apply 、call 以及 bind 的使用和區別APP
- javascript -- apply/call/bind的區別JavaScriptAPP
- js中call、apply、bind的區別JSAPP
- bind、call、apply區別?如何實現?APP
- this, call, apply 和 bindAPP
- 讓你弄懂 call、apply、bind的應用和區別APP
- bind、call、apply的區別與實現原理APP
- JavaScript中apply、call、bind的區別與用法JavaScriptAPP
- js中call,apply和bind方法的區別和使用場景JSAPP
- JS中改變this的指向 call、apply 和 bind 的區別JSAPP
- 「乾貨」細說 call、apply 以及 bind 的區別和用法APP
- this、apply、call、bindAPP
- [譯] Javascript: call()、apply() 和 bind()JavaScriptAPP
- [譯] this(他喵的)到底是什麼 — 理解 JavaScript 中的 this、call、apply 和 bindJavaScriptAPP
- JS每日一題: Call,Apply,Bind的使用與區別,如何實現一個bind?JS每日一題APP
- 【面試題】手寫call、apply、bind面試題APP
- 【JavaScript】深入理解call,以及與apply、bind的區別JavaScriptAPP
- call apply bind的作用及區別? 應用場景?APP
- Javascript - apply、call、bindJavaScriptAPP
- js apply/call/caller/callee/bind使用方法與區別分析JSAPP
- apply & call & bind 原始碼APP原始碼
- bind/call/apply 深度理解APP
- 手寫call,apply,bindAPP
- apply,call,bind的用法APP
- apply call bind 簡介APP
- 手寫call、apply、bindAPP
- this指向與call,apply,bindAPP
- JavaScript-apply、bind、callJavaScriptAPP
- 關於call, apply, bind方法的區別與內部實現APP
- JavaScript方法call,apply,caller,callee,bind的使用詳解及區別JavaScriptAPP
- 說說bind、call、apply的區別?並手寫實現一個bind的方法APP
- js深入之實現call、apply和bindJSAPP
- 談談JavaScript中的call、apply和bindJavaScriptAPP
- 【譯】理解this及call,apply和bind的用法APP
- 淺談JavaScript中的apply、call和bindJavaScriptAPP