js 裏面call()的使用

call 是爲了改變某個函數運行時的上下文(context)而存在的,換句話說,就是爲了改變函數體內部 this 的指向。
JavaScript 的一大特點是,函數存在「定義時上下文」和「運行時上下文」以及「上下文是可以改變的」這樣的概念。

function fruits() {}
 
fruits.prototype = {
    color: "red",
    say: function() {
        console.log("My color is " + this.color);
    }
}
 
var apple = new fruits;
apple.say();    //My color is red

但是如果我們有一個對象banana= {color : "yellow"} ,我們不想對它重新定義 say 方法,那麼我們可以通過 call 或 apply 用 apple 的 say 方法:

banana = {
    color: "yellow"
}
apple.say.call(banana);     //My color is yellow
apple.say.apply(banana);    //My color is yellow

什麼的say方法裏面的“this”就指向banana對象了,因此打印出的color是yellow;

所以,可以看出 call 是爲了動態改變 this 而出現的,當一個 object 沒有某個方法(本栗子中banana沒有say方法),但是其他的有(本栗子中apple有say方法),我們可以藉助call或apply用其它對象的方法來操作。 

補充:

function fruits() {}
 
fruits.prototype = {
    color: "red",
    say: function() {
        console.log("My color is " + this.color);
    }
}
 
var apple = new fruits;    
banana={
    color:"yellow"  
}
//banana是指向對象
//帶參數的原型對象——成員方法
apple.say.call(banana,"我是參數");

 

 

 

轉載:https://www.cnblogs.com/luzhanshi/p/11982477.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章