一.函數(shù)調(diào)用形式:
function fun(){
alert ("123");
}
fun( );
var fun =function (){
alert ("123");
}
fun( );
函數(shù)調(diào)用也稱一般調(diào)用,在函數(shù)調(diào)用模式中,this關(guān)鍵字指的是全局對(duì)象,如果在瀏覽器中就是指的是window。
二.方法調(diào)用:
var fun=function(){
alert("1234");
};
var a={};
a.fn=fun;
a.fn();
var?func=function(){
console.log(this);
};
var?o={};
o.fn=func;
func();?//"[object?Window]"
o.fn();?//"[object?Object]"
console.log(o.fn===func);//true
這時(shí)調(diào)用的是對(duì)象a上面的方法fn,函數(shù)調(diào)用和方法調(diào)用的區(qū)別就是this關(guān)鍵字的指向,函數(shù)調(diào)用this指的是全局對(duì)象,方法調(diào)用中的this指的是當(dāng)前對(duì)象。
三.構(gòu)造器調(diào)用:
var?Person=function(){
this.name = ' 英雄聯(lián)盟 ' ; ?//此時(shí)的this是window
this.say = function(){
console.log ( "歡迎來到"+this.name );
};
};
var?p=new?Person() ; //new創(chuàng)建一個(gè)p對(duì)象
p.say(); //當(dāng)p調(diào)用say方法時(shí),this就是p對(duì)象。
在構(gòu)造函數(shù)中this指的是被創(chuàng)建的對(duì)象。
1.所有需要有對(duì)象使用的屬性,必須使用this引導(dǎo)。
var?Person=function(){
this.name='英雄聯(lián)盟';
return?{
name:'data'
}
};
var?p=new?Person();
console.log(p.name);//data
var?Person=function(){
this.name='英雄聯(lián)盟';
return?'data';
};
var?p=new?Person();
console.log(p);//"[object?Object]"
console.log(p.name); ? ? ? ? ?//'英雄聯(lián)盟'
2.函數(shù)的return語(yǔ)句意義被改寫,如果返回的是原意,那么保留return的意義,返回return后面的對(duì)象,如果返回非對(duì)象(字符串,數(shù)值,布爾等),就返回this,不指定return返回的也是this。
四.apply調(diào)用模式:
var?Person=function(){
this.name='英雄聯(lián)盟';
console.log(this);?//?"[object?Window]"
};
Person.apply(null); ? ?//使用了null
console.log(name);
var?Person2=function(){
this.name='英雄聯(lián)盟';
console.log(this);?//"[object?Object]"
};
var?o={} ; ? ? ? ? ? //使用了對(duì)象
Person2.apply(o);
console.log(o.name);
函數(shù)作為對(duì)象還有apply方法和call方法使用。
apply和call的區(qū)別就是apply中的參數(shù)是數(shù)組。
使用call和apply模式可以任意操作this的意義,在這個(gè)模式中如果使用了null,就是函數(shù)模式,如果使用了對(duì)象,就是方法模式。