欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS中改變this指向的方法(call和apply、bind)

 更新時間:2016年03月26日 21:17:53   作者:haoxl  
this是javascript的一個關(guān)鍵字,隨著函數(shù)使用場合不同,this的值會發(fā)生變化。但是總有一個原則,那就是this指的是調(diào)用函數(shù)的那個對象,通過本文給大家介紹JS中改變this指向的方法(call和apply、bind),需要的朋友參考下

this是javascript的一個關(guān)鍵字,隨著函數(shù)使用場合不同,this的值會發(fā)生變化。但是總有一個原則,那就是this指的是調(diào)用函數(shù)的那個對象。

this一般指向的是當前被調(diào)用者,但也可以通過其它方式來改變它的指向,下面將介紹三種方式:

1.call用作繼承時:

function Parent(age){
this.name=['mike','jack','smith'];
this.age=age;
}
function Child(age){
Parent.call(this,age);//把this指向Parent,同時還可以傳遞參數(shù)
}
var test=new Child(21);
console.log(test.age);//21
console.log(test.name);
test.name.push('bill');
console.log(test.name);//mike,jack,smith,bill

2.call和apply都可以改變this指向,不過apply的第二個參數(shù)是散列分布,call則可以是一個數(shù)組

console.log(Math.max.apply(null,[1,2,3,4]));//4

apply() 方法接收兩個參數(shù):一個是在其中運行函數(shù)的作用域,另一個是參數(shù)數(shù)組。其中,第二個參數(shù)可以是 Array 的實例,也可以是arguments 對象。call() 方法與 apply() 方法的作用相同,它們的區(qū)別僅在于接收參數(shù)的方式不同。對于 call()
方法而言,第一個參數(shù)是 this 值沒有變化,變化的是其余參數(shù)都直接傳遞給函數(shù)。換句話說,在使用call() 方法時,傳遞給函數(shù)的參數(shù)必須逐個列舉出來。

3.ES5還定義了一個方法:bind(),它會創(chuàng)建一個函數(shù)的實例,其this值會被綁定到傳給bind()函數(shù)的值。如

window.color='red';
var o={color:'blue'};

function sayColor(){
console.log(this.color);
}
var objectSaycolor=sayColor.bind(o);
//var objectSaycolor=sayColor.bind();
objectSaycolor();//blue

在這里sayColor()調(diào)用bind()并傳入對象o,創(chuàng)建了objectSayColor()函數(shù)。objectSayColor()函數(shù)的this值等于o,因此即使是在全局作用域中調(diào)用這個函數(shù),也會看到blue。

以上所述是小編給大家介紹的JS中改變this指向的方法(call和apply、bind),希望對大家以上幫助!

下面還有點時間給大家補充點基礎(chǔ)知識有關(guān):call()與apply()區(qū)別

一、方法的定義

call方法:

語法:call(thisObj,Object)

定義:調(diào)用一個對象的一個方法,以另一個對象替換當前對象。

說明:

call 方法可以用來代替另一個對象調(diào)用一個方法。call 方法可將一個函數(shù)的對象上下文從初始的上下文改變?yōu)橛?thisObj 指定的新對象。

如果沒有提供 thisObj 參數(shù),那么 Global 對象被用作 thisObj。

apply方法:

語法:apply(thisObj,[argArray])

定義:應(yīng)用某一對象的一個方法,用另一個對象替換當前對象。

說明:

如果 argArray 不是一個有效的數(shù)組或者不是 arguments 對象,那么將導致一個 TypeError。
如果沒有提供 argArray 和 thisObj 任何一個參數(shù),那么 Global 對象將被用作 thisObj, 并且無法被傳遞任何參數(shù)。

代碼示例:

function Animal(name) {
   this.name = name;
   this.showName = function() {
     console.log(this.name);
   };
 }
 function Cat(name) {
   Animal.call(this, name);
 }
 Cat.prototype = new Animal();
 function Dog(name) {
   Animal.apply(this, name);
 }
 Dog.prototype = new Animal();
 var cat = new Cat("Black Cat"); //call必須是object
 var dog = new Dog(["Black Dog"]); //apply必須是array
 cat.showName();
 dog.showName();
 console.log(cat instanceof Animal);
 console.log(dog instanceof Animal);

模擬call, apply的this替換

 function Animal(name) {
   this.name = name;
   this.showName = function() {
     alert(this.name);
   };
 };
 function Cat(name) {
   this.superClass = Animal;
   this.superClass(name);
   delete superClass;
 }
 var cat = new Cat("Black Cat");
 cat.showName();

相關(guān)文章

  • 淺談JS的基礎(chǔ)類型與引用類型

    淺談JS的基礎(chǔ)類型與引用類型

    下面小編就為大家?guī)硪黄獪\談JS的基礎(chǔ)類型與引用類型。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • js構(gòu)建二叉樹進行數(shù)值數(shù)組的去重與優(yōu)化詳解

    js構(gòu)建二叉樹進行數(shù)值數(shù)組的去重與優(yōu)化詳解

    這篇文章主要給大家介紹了關(guān)于js構(gòu)建二叉樹進行數(shù)值數(shù)組的去重與優(yōu)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-03-03
  • JavaScript的concat方法實例代碼(數(shù)組連接)

    JavaScript的concat方法實例代碼(數(shù)組連接)

    這篇文章主要介紹了JavaScript的concat方法實例代碼,包括數(shù)組連與字符連接,需要的朋友可以參考下
    2023-03-03
  • js引擎垃圾回收機制示例詳解

    js引擎垃圾回收機制示例詳解

    最近看到一些面試的回顧,不少有被面試官問到談?wù)凧S垃圾回收機制,下面這篇文章主要給大家介紹了關(guān)于js引擎垃圾回收機制的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • JavaScript 正在上傳功能提示效果代碼

    JavaScript 正在上傳功能提示效果代碼

    JavaScript實現(xiàn)正在上傳功能提示代碼,主要用于一些上傳文件過程中的提示信息。
    2010-04-04
  • return false;和e.preventDefault();的區(qū)別

    return false;和e.preventDefault();的區(qū)別

    Have you ever seen those two things (in the title) being used in jQuery? Here is a simple
    2010-07-07
  • 常用的javascript設(shè)計模式

    常用的javascript設(shè)計模式

    本文主要介紹了常用的javascript設(shè)計模式:單體模式;工廠模式;單例模式;觀察者模式(發(fā)布訂閱模式);策略模式等。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • 詳解JavaScript中浮點數(shù)的精度計算

    詳解JavaScript中浮點數(shù)的精度計算

    這篇文章主要來和大家介紹一下JavaScript中浮點數(shù)精度計算的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-06-06
  • 如何從零開始利用js手寫一個Promise庫詳解

    如何從零開始利用js手寫一個Promise庫詳解

    ES2015 推出了JS 的 Promise ,而在沒有原生支持的時候,我們也可以使用諸如 Promises/A+ 的庫的幫助,在我們的代碼里實現(xiàn)Promise 的支持,下面這篇文章主要給大家介紹了如何從零開始利用js手寫一個Promise庫的相關(guān)資料,需要的朋友可以參考下。
    2018-04-04
  • 原生JS實現(xiàn) MUI導航欄透明漸變效果

    原生JS實現(xiàn) MUI導航欄透明漸變效果

    透明漸變導航是一種解決滾動條通頂?shù)淖兺ǚ桨?。這篇文章主要介紹了原生JS實現(xiàn) MUI導航欄透明漸變效果,需要的朋友可以參考下
    2017-11-11

最新評論