標籤:http for alert 私人變數 console 構造 interval src set
一、this的詳解
1、誰最終調用函數,this就指向誰。(具體如下:)
① this指向的,永遠只可能是對象!
② this指向誰,永遠不取決於this寫在哪!!而是取決於函數在哪調用。
③ this指向的對象,我們稱之為函數的上下文context,也叫函數的調用者。
2、this的指向規律(共有六條這是重點)
① 通過函數名()直接調用:this指向window
function func(){
console.log(this);
}
func();
② 通過對象.函數名()調用的:this指向這個對象
var obj = {
name:"obj",
func1 :func
};
obj.func1();
③ 函數作為數組的一個元素,通過數組下標調用的:this指向這個數組
var arr = [func,1,2,3];
arr[0](); // this--->arr
④ 函數作為window內建函數的回呼函數調用:this指向window setInterval setTimeout 等...
setTimeout(func,1000);// this--->window
//setInterval(func,1000);
⑤ 函數作為建構函式,用new關鍵字調用時:this指向新new出的對象
var obj = new func(); //this--->new出的新obj
⑥通過call、apply和bind調用,this指向我們規定的對象。(人為控制的)
func.call(obj,參數1 參數2 參數3....)
func.apply(obj,參數1 參數2 參數3....)
func.bind(obj,參數1 參數2 參數3....) var f = function.bind(obj)
二、原型鏈
1、通過建構函式new出的對象,新對象的_proto_指向建構函式
2、所有函數的_proto_指向function()內建函數的prototype
3、非建構函式new出的對象包括( {} newObject() 對象的prototype )的_proto_指向Object的prototype
4、Object的_proto_指向null
如下是一張自繪的原型鏈圖
三、閉包
JS中的範圍
1、全域變數:函數外聲明的變數
局部變數:函數內聲明的變數
在JS中,函數為唯一的局部範圍,而if、for等其他{}沒有自己的範圍
所以,函數外不能訪問局部變數。其實,變數在函數執行完畢以後,佔用的記憶體就被釋放。
2、如何訪問函數私人變數?
JS中,提供了一種"閉包"的概念:在函數內部,定義一個子函數,可以用子函數訪問父函數的私人變數。執行完操作以後,將子函數通過return返回。
function func2(){
var num = 1;
function func3(){
var sum = num+10;
alert(sum);
}
return func3;
}
var f = func2();
f();
3、閉包的作用:
① 訪問函數的私人變數;
② 讓函數的變數始終存在於記憶體中,而不被釋放。
Java script OOP——淺談