定時器、引用資料型別、原型
阿新 • • 發佈:2018-12-11
定時器
1.定時器是一個非同步物件;
2.定時器有一個返回值,這個返回值代表了在程式中他是第幾個定時器
3.定時器的清除原理是阻止了定時器的函式體執行,這個定時器本身仍然存在,其返回值序號也存在
引用資料型別
在儲存引用資料型別過程中,我們是拿不到引用資料型別裡面的資料的,只有儲存完畢,才可以拿到它的值
var obj={ name:'js', can:(function () { console.log(obj); return obj.name; })(), do:function () {} }; console.log(obj.can)
原型鏈與作用域鏈
原型鏈:在建構函式中,如果我們需要找到new出來函式中的某個屬性,就會通過--proto--往所屬類的原型(prototype)一步一步往上查詢,直到找到Object為止,這個查詢的過程就稱為原型鏈;
作用域鏈:在一個函式體中,用到了某個變數,首先我們會在當前作用域下查詢這個變數,如果當前作用域下沒有,就會一級一級往上查詢,直到找到window為止,這個過程稱為作用域鏈;
體驗原型題:
判斷某個屬性是不是函式的公有屬性:先使用in判斷是不是該函式的屬性,然後通過hasOwnProperty判斷是不是私有屬性,如果是false,則是公有屬性!
//in :公有屬性和私有屬性都可以判斷 function FF() { this.a="aa"; } FF.prototype.A="AA"; var f=new FF; console.log("a" in f); console.log("A" in f); //hasOwnProperty判斷是不是自己的私有屬性 console.log(f.hasOwnProperty("a")); console.log(f.hasOwnProperty("A"));
可以通過constructor.name來判斷某個變數是基本資料型別還是引用資料型別:
//可以使用xx.constructor.name來檢測xx的資料型別 console.log([1, 2, 3].constructor.name);//"Array" var obj={a:"a"}; console.log(obj.constructor.name);//"Object" function fn() {} console.log(fn.constructor.name);//"Function" var n=1; var str="123"; var b=true; console.log(n.constructor.name); console.log(str.constructor.name); console.log(b.constructor.name);
原型是一個物件,擁有constructor屬性,如果我們給prototype重新賦值一個物件,此時constructor屬性就會丟失,我們可以手動加上constructor的值。
function FF() { this.x="xx"; } FF.prototype={ getX:function () {}, constructor:FF }; var f =new FF();