Javascript函數4種調用模式

// 函數
		//編程,就是將需求分解變成一組函數與數據結構的技能
		//javascript是一門基於原型繼承的語言;
		//javascript 是一門函數式的面向對象編程語言,全部函數開源擁有方法
	// 函數對象
		/***
		1.對象字面量產生的對象鏈接到Object.prototype
		2.函數對象鏈接到Function.prototype
		3.每一個函數建立時都會兩個隱藏屬性:函數的上下文和實現函數行爲的代碼
		4.函數對象在建立時會配有一個prototype屬性,它的值是一個擁有constructor屬性且值爲該函數的對象***/
// 函數字面量
var add = function(a,b){ //匿名函數
	return a+b;
}

// 調用
/*4種調用模式:
	方法模式調用、函數調用模式、構造器調用模式、apply調用模式
	(這些模式在如何初始化關鍵參數this上存在差別)

	*/
//1.方法調用模式:
var myproject = {
	value:0,
	increamt:function(ico){
		if(ico === 'number')  this.value += 1;
		else this.value += ico;
	}
	//this從對象中取值或修改,this可取得所屬對象的上下文的方法
	//稱爲公共方法
}
myproject.increamt(3);
console.log(myproject.value);
//2.函數調用模式:
	//函數不是對象的屬性時,就被看成一個函數來調用,以此模式調用函數時,this被綁定到全局對象
	//解決方法:that
	myproject.double = function(){
		var that = this; //解決了全局對象的問題
		var helper = function(){
			that.value = add(that.value,that.value);
		};
		helper();//函數形式調用helper
	};
	myproject.double();
	document.write(myproject.value);//6
//3.構造器調用模式(不推薦):
	//若是函數前面帶上 new 來調用,那麼會建立一個鏈接到該函數的prototype成員新對象,同時this會被綁定到那個新對象上。
	var Quo = function (string){
		this.status = string;
	}
	Quo.prototype.get_status = function (){
		return this.status;
	}
	//構造一個	Quo事例
	var myQuo = new Quo('confused');
	console.log(myQuo.get_status());
//4.apply調用模式
	//apply方法讓咱們構建一個參數數組傳遞給調用函數,容許咱們選擇this的值,apply(要綁定給this的值,一個參數數組);
//構造一個包含兩個數字的數組,並將它們相加
var array = [3,5];
var sum = add.apply(null,array);//sum=8
//構造一個包含 status 成員對象
var statusObject = {
	status:'a-ok'
};
//statusObject並無繼承自Quo.prototype,但咱們能夠在statusObject上調用get_status 方法
var status = Quo.prototype.get_status.apply(statusObject);//a-ok
相關文章
相關標籤/搜索