js學習(三)--同樣靈活的函數、類

函數

函數的作用:功能代碼塊的封裝,減少重複代碼、代碼冗餘。
注:js代碼生命區和執行區在一起。

聲明方式

因爲js是弱類型語言,所以在函數的聲明中,參數的類型可以不寫。
聲明方式1:

function test1(a1,a2){
	alert("test01");
}
test1(1,1);//調用	

聲明方式2:

var test2 = new Function("a1","a2","alert('test02');");//前面的參數是聲明函數的參數(任意多個),最後一個參數是聲明函數的函數體
test2(1,1);//調用

聲明方式3:

var test3 = function(a1,a2){
	alert("我是聲明方式3");
}
test3("a1","a2");//調用

== 上述聲明方式只是在用法上有區別,底層實現原理都一樣==

形參學習

function test1(a1,a2){
	alert("test01");
}
test1();
test1(1);
test1(1,1);//調用	
test1(1,1,1);

調用函數時,參數可以傳任意個,按順序給函數傳值。如果傳的比需要的少,那麼後面的參數爲undefined,如果傳的比需要的多,那麼多傳的沒有參數接收,無法使用。

返回值

var test4 = function(a1){
	alert("函數返回值");
	return  1;
}
alert(test4(1));/* 沒有返回值還打印會報錯 */

return 返回值;

輸出的函數如果沒有返回值會報錯。

函數執行符

函數的執行符是“()”,有小括號的時候執行函數,沒有則是一個變量。

function test1(a1,a2){
	return "返回值";
}
alert(test1);//輸出test1的值
alert(test1("a1","a2"));//執行test1()並輸出返回值

alert(test1); –
在這裏插入圖片描述
alert(test1(“a1”,“a2”)); –
在這裏插入圖片描述

開發中常用樣式

匿名函數

function test2(fu){//函數參數是另一個函數
	fu();
}
//匿名函數做另一個函數的參數
test2(function(){
	alert("開發");
});

類學習

類的聲明

類的聲明只用一種形式:

function Person(name,age){
	/* 類中定義的變量是對象的公共部分,每個對象可以擴充 */
	this.name = name;//不用聲明,自動聲明
	this.age = age;
	this.id;
	this.test = function(a){
		alert(a);
	}//兩個對象的方法不是同一個 p1.test === p2.test  false
}

js類的聲明類似構造器聲明,this.變量名指代類中的變量,用類名後面的參數賦值,或者自己賦值,或者不復制,定義函數與變量相同。類中的變量都不用聲明,js會自動聲明。
在類中定義的變量都是對象公有的部分(原型空間),即之後新建的每一個對象都有這些屬性函數。可以在聲明一個對象之後給對象添加一個變量、函數。如下:

var p1 = new Person("張三",20);
var p2 = new Person("李四",20);
p1.address = "山東省";//Person類裏面沒有adress變量,但是可以自己定義,這裏p1有adress變量,而p2沒有adress變量

類的使用

聲明一個對象:

var p1 = new Person("張三",20);//js中所有變量(對象也是變量)都用var關鍵字

使用對象的變量:

alert(p1.name);

prototype:
類中有函數,每聲明一個對象,都會佔用一塊內存給函數,但是同一個類的不同對象的函數功能都是一樣的,如果讓同一個類的不同對象使用的函數(在內存中的)都是同一個,那樣會大大節省內存空間,使用prototype可以實現這樣的需求。

function User(name,id){
	this.name = name;
	this.id = id;
	this.test1 = function(){
		alert("內部函數");
	}
}
User.prototype.test2 = function(){//要想使用prototype只能在外面定義
	alert("外部函數");
}

var u1 = new User("張三",21);
var u2 = new User("李四",21);
alert(u1.test1 === u2.test1); //false
alert(u1.test2 === u2.test2); //true

類的“繼承”

js沒有繼承,但可以在一個類(子類)中定義另一個類(父類)的變量實現相同效果。

function Person(name,age){
	this.name = name;
	this.age = age;
	this.id;
	this.test = function(a){
		alert(a);
	}
}
function User(name,id){
	this.name = name;
	this.id = id;
}
User.prototype.test = function(){
	alert("我是user");
}
Person.prototype.user = new User();
p1.user.test();

自定義對象

因爲js的類可以進行擴充,同時在開發中很多時候並不知道傳過來的數據是什麼類,所以要使用自定義對象,動態存儲數據。
創建自定義對象:

/* 第一種方法 */
var obj1 = new Object(); //可以認爲對象裏面什麼都沒有
obj1.name = "王二狗";
obj1.id = "2969";
obj1.test = function(){/* 一般用來存儲數據,不會在自定義對象中寫函數 */
	alert("我是王二狗");
}

/* 第二種方法 */
var obj2 = {};
obj2.name = "大偉哥";

作用:
很多時候我們沒有辦法預先知道一個對象應該有哪些屬性,所以只能使用自定義對象來存儲數據,保證數據的完整性,常在Ajax中使用。

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