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

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

 更新時(shí)間: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一般指向的是當(dāng)前被調(diào)用者,但也可以通過其它方式來改變它的指向,下面將介紹三種方式:

1.call用作繼承時(shí):

function Parent(age){
this.name=['mike','jack','smith'];
this.age=age;
}
function Child(age){
Parent.call(this,age);//把this指向Parent,同時(shí)還可以傳遞參數(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ù):一個是在其中運(yùn)行函數(shù)的作用域,另一個是參數(shù)數(shù)組。其中,第二個參數(shù)可以是 Array 的實(shí)例,也可以是arguments 對象。call() 方法與 apply() 方法的作用相同,它們的區(qū)別僅在于接收參數(shù)的方式不同。對于 call()
方法而言,第一個參數(shù)是 this 值沒有變化,變化的是其余參數(shù)都直接傳遞給函數(shù)。換句話說,在使用call() 方法時(shí),傳遞給函數(shù)的參數(shù)必須逐個列舉出來。

3.ES5還定義了一個方法:bind(),它會創(chuàng)建一個函數(shù)的實(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),希望對大家以上幫助!

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

一、方法的定義

call方法:

語法:call(thisObj,Object)

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

說明:

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

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

apply方法:

語法:apply(thisObj,[argArray])

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

說明:

如果 argArray 不是一個有效的數(shù)組或者不是 arguments 對象,那么將導(dǎo)致一個 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)建二叉樹進(jìn)行數(shù)值數(shù)組的去重與優(yōu)化詳解

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

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

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

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

    js引擎垃圾回收機(jī)制示例詳解

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

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

    JavaScript實(shí)現(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è)計(jì)模式

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

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

    詳解JavaScript中浮點(diǎn)數(shù)的精度計(jì)算

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

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

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

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

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

最新評論