call, apply, bind

2017-08-25  本文已影响0人  有情怀的程序猿

主要目的都是为了 更改this 上下文, 实现继承,

call
//对象
function func() {console.log(this)}
func()
// 可见this 指向的是window
// Window {stop: ƒ, open: ƒ, alert: ƒ, confirm: ƒ, prompt: ƒ, …}

//使用 call 更改其this指向的上下文为一个对象
var obj = {a: 1};
func.call(obj)
// {a: 1}

//方法

function Animal(){    
    this.name = "Animal";    
    this.showName = function(){    
        alert(this.name);    
    }    
}    
  
function Cat(){    
    this.name = "Cat";    
}    
   
var animal = new Animal();    
var cat = new Cat();    
    
//通过call或apply方法,将原本属于Animal对象的showName()方法交给对象cat来使用了。    
//输入结果为"Cat"    
animal.showName.call(cat,",");    
//animal.showName.apply(cat,[]); 
apply
//对象
function func() {console.log(this)}
func()
// 可见this 指向的是window
// Window {stop: ƒ, open: ƒ, alert: ƒ, confirm: ƒ, prompt: ƒ, …}

//使用 apply更改其this指向的上下文为一个对象
var obj = {a: 1};
func.apply(obj)
// {a: 1}

//方法

function Animal(){    
    this.name = "Animal";    
    this.showName = function(){    
        alert(this.name);    
    }    
}    
  
function Cat(){    
    this.name = "Cat";    
}    
   
var animal = new Animal();    
var cat = new Cat();    
    
//通过call或apply方法,将原本属于Animal对象的showName()方法交给对象cat来使用了。    
//输入结果为"Cat"       
animal.showName.apply(cat,[]); 
bind
上一篇 下一篇

猜你喜欢

热点阅读