javascript面向對象、私有作用域、閉包淺談

1.理解嵌套函數、作用域和閉包

a.外部函數讀取內部變量

function f1(){
	var age = 25;
	var getAge = function(){
		return ++age;	
	}
	return getAge;
}

var result = f1();
alert(result());
alert(result());

函數getAge嵌套在函數f1的內部,f1的返回值是一個Function類型的變量getAge,在f1執行後,匿名函數賦值給result,再執行result函數返回age,輸出26,27...

b.模仿塊級作用域

function f1(){
	var i = 0;
	for(var i =0; i < 5; i++){
		
	}
	alert(i);
}
f1();                   //  打印出5

function f1(){
	var i = 0; 
	(function(){
		for(var i = 0; i < 5; i++){    //私有作用域函數執行後,變量銷燬
		
		}		
	})();
	alert(i);     //  打印出0
}
f1()

2.創建對象的基本模式


a.使用this

function F1(value){
	this.User = value;                 //  在構造方法中使用this創建公有屬性和方法
	this.getUser = function(){      
		return this.User;
	}
}
var f1 = new F1('Lin');          
alert(f1.getUser());                   //   打印Lin
var f2 = new F1('Boo');
alert(f1.getUser())                    //   打印Lin


b.不使用this

function F1(value){
	User = value;
	F1.prototype.getUser = function(){
		return User;
	}
}
var f1 = new F1('Lin');
alert(f1.getUser());                //   打印Lin
var f2 = new F1('Boo');
alert(f1.getUser())                //   打印Boo


c.通過特權方法訪問私有成員變量

function F1(x,y,z){
	var a = 'a',        //私有變量
	     b = 'b',
	     c = 'c';
	this.setOptions = function(){      // 實現公共接口的特權方法
		return {                           // 返回對象字面量變量
			 a : x,
			 b : y,
			 c : z	
		};
	}
}
F1.prototype = {                    // 公共方法
	getSpeed : function(){
		alert(this.setOptions().a);    //   打印出a的值
	}	
}
var f1 = new F1('xxx','yyy','zzz');
f1.getSpeed();


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