使用函數聲明建立一個函數:
function 函數名([形參1,形參2,形參3])
{
語句。。。
}
調用的時候:函數名();
使用函數表達式建立一個函數:
var 函數名=function([形參1,形參2])
var fun3=function()
console.log("12345");
(1)在調用參數時候,可以在()中指定實參,實參将會指派給函數中對應的形參。
(2)調用函數時解析器不會檢查實參的類型和數量,實參可以是任意的類型也可以是一個對象。
var obj={
name:"孫悟空",
age:18,
gender:"男",
address:"花果山"
}
function sayhello(o)
{
console.log(o.name+o.age+o.gender+o.address);
sayhello(obj);
(1)一般函數傳回一個值就行,不需要進行輸出處理。
(2)如果return後面不加值或者無return,就會傳回undefined.
fun(mianji(10));//調用函數,相當于使用函數的傳回值
fun(mianji);//調用函數對象,相當于直接使用函數對象
函數對象:
(function(){
alert("12345");
})();
以上函數立即執行,不需要調用
obj.sayname();//調方法
fun();//調函數
使用for。。in。。語句
for(var n in obj)
console.log(n);
console.log(obj[n]);//對象[屬性名]=屬性值;
1,全局作用域
直接解除安裝script标簽中的js語句中,在頁面打開是建立,頁面關閉時銷毀。有一個全局對象window,它代表的是一個浏覽器的視窗,它由浏覽器建立我們可以直接使用。建立的變量都會作為window對象的屬性進行儲存。建立的函數都會作為window對象的方法進行儲存。
變量的聲明提前:使用var關鍵字聲明的變量,會在所有的代碼執行之前被聲明。但是如果不用var則不會被提前
函數的聲明提前:使用函數聲明形式建立的函數function函數(){},他會在所有的代碼執行之前就被建立
使用函數表達式建立的函數不會被聲明提前。
2,函數作用域
在函數作用域中可以通路到全局變量
函數中,不适用var聲明的變量都會成為全局變量
解析器在調用函數每次都會向函數内部傳遞一個隐含的參數,這個隐含的參數就是this,this指向的是一個對象,這個對象我們稱為函數執行的上下文對象,資料函數的調用方法的不同,this會指向不同的對象
(1)以函數形式調用時候,this指的是window,比如fun()
(2)以方法形式調用時候,this指的是目前方法的對象,比如obj.name()
function createperson(name,age,gender)
var obj=new object();
obj.name=name;
obj.age=age;
obj.gender=gender;
obj.sayname=function()
alert(this.name);
return obj;
var obj2=createperson("豬八戒",28,“男”);
var obj3=createperson("孫悟空",29,“男”);
console.log(obj2);
console.log(obj3);
習慣第一個字母大寫,普通函數直接調用,構造函數需要使用new關鍵字調用
構造對象建立過程:
(1)立即建立一個新的對象
(2)将建立的對象設定為函數中this
(3)逐行執行函數中的代碼
(4)将建立的對象作為傳回值傳回
使用instanceof可以檢查一個對象是否是一個類的執行個體
文法:
對象 instanceof 類名
如果是真傳回true
所有的對象都是object的對象,所有的對象做instanceof檢查時候都是true。
this情況:
1,當以函數的形式調用的時候,this是window;
2,當以方法的形式調用時,調用方法this就是誰;
3,當以構造函數的形式調用時,this就是新建立的那個對象。
我們所建立的每一個函數,解析器都會向函數中添加一個屬性prototype。這個屬性對應着一個對象,這個對象就是我們說的原型對象。
如果函數作為普通函數調用prototype則沒有任何作用,當函數以構造函數的形式調用時,他所建立的對象中都會有一個隐含的屬性。指向該構造函數的原型對象,我們可以通過__proto__來通路該屬性。
原型對象就相當于一個公共的區域,所有同一個類的執行個體都可以通路到這個原型對象,我們可以将對象中共有的内容,統一設定到原型對象中。
當我們通路對象的第一個屬性或方法時,他會在對象自身中尋找,如果有直接使用,沒有則去原型裡找。如果還是沒有,則去原型的原型裡面找
myclass.prototype.a=123;//添加原型屬性a
var mc=new myclass();
mc.a;//123
一會後我們建立構造函數中,可以将這些對象共有的屬性和方法,同意添加到構造函數的原型中。
使用in 檢查對象中是否含有某個屬性時,如果對象中沒有但是原型中有,也會傳回true。如
console.log("name" in mc);
使用hasownproperty()來檢查對象自身中是否含有該屬性,使用該方法隻有當對象自身中含有屬性時,才會傳回true。如
console.log(mc.hasownproperty("name"));
console.log(mc.__proto__);
當我們直接在頁面上列印一個對象時候,事實上輸出的是對象的tostring方法
如果建立了多個對象,想要多個對象的tostring方法都重寫,我們需要在原形裡面重寫tostring方法。如:
person.prototype.tostring=function(){
return "person[name]="+this.name;