代碼實(shí)力1
window.color = 'red';
document.color = 'blue',
let obj = {
color : 'pink'
}
function createColor (color){
this.color = color;
}
let c = new createColor('white');
function showColor(){
console.log(this.color)
}
showColor() //默認(rèn)this就是window red
showColor.call(window) // red
showColor.call(cocument) // blue
showColor.call(obj) // pink
showColor.call(c) // white
代碼實(shí)例2:
var elJson = {
name:'Web前端',
callBack:function(){
console.log(this.name)
}
};
var newJson = {
name:'javaScript is cool'
};
//直接調(diào)用
elJson.callBack() //結(jié)果是Web前端
//而使用call()方法調(diào)用
elJson.callBack.call(newJson ) //結(jié)果是javaScript is cool;
解釋
call()改變了this的指向,剛開始this的指向是elJson這個(gè)對象,而當(dāng)使用call()this就不在指向這個(gè)對象了,而是新的newJson這個(gè)對象
代碼實(shí)例3
利用構(gòu)造對象方式
var newJson = {
name:'javaScript is cool'
};
function createJs(name){
this.name = name;
this.callBack = function(){
console.log(this.name);
}
}
var cat = new createJs('Web前端');
cat.callBack(); //結(jié)果是Web前端
cat.callBack.call(newJson) //結(jié)果是javaScript is cool;
兩種方法的原理是一樣的,只是這一種利用構(gòu)造對象;
其實(shí)在js中var 一個(gè)變量都是在頂層對象window中添加了一個(gè)屬性而已