複習2.0
Js中級複習
- this js的關鍵字,
用途:指向某一個物件。
如何判斷this指向
函式(方法)內
一種以函式的方式呼叫(不帶.) this指向winodw
一種以方法的形式呼叫(函式名前面帶.)this指向點前面的
函式(方法)外,this指向window
This指向的特列
- 自呼叫函式內的this都是window
- 定時器的this指向window
- 事件裡面的this 指向觸發事件的元素
- 建構函式裡的this指向他的例項
- 怎樣替換函式內的this
(1) Call()
(2) Apply
(3) Bind()
- fn.call(B,5) B取代了fn中的this並把fn呼叫了。
Call和apply,bind只能是函式(方法)或者函式物件的
var a=45;
var b={
a:12
}
var arr=[12,56]
function fn(){
console.log(this.a)
}
fn.call(b) call前面必須是函式物件,其他的不行
2.面向物件
1.單例模式
Var obj={}
2.工廠模式
function fn(){
Var obj={}
obj.name=”zhang”
return obj;
}
- 建構函式 三個特點 函式名首字母大寫 函式的屬性前面加this
函式呼叫用new 呼叫
function Person(name){
this.name=name
}
Var zhang=new Person(“zhang”)
1.每個建構函式天生自帶一個prototype的屬性,叫原型,他是一個物件,存放父類可繼承的屬性
2.函式內的屬性是子物件天生就繼承的,不需要任何操作
3.prototype上的屬性是繼承給子物件的,子物件必須通過__proto__(原型鏈)來查詢
4.每個子物件都有一個__proto__,它指向父類的原型。
原型鏈:
子物件再操作一個屬性時,首先看屬性是私有的,有就直接用,沒有就通過__proto__向子物件的父類查詢,父類有就使用,沒有就用父類的__proto__繼續向上查詢,知道基類Object,如果基類沒有就是undefined
Object.prototype.sex="男男女女"
function Person(){
this.name="張三"
}
Person.prototype={
age:"456"
}
var zhang=new Person()
console.log(zhang.sex)
- 作用域和作用域鏈
瀏覽器客戶端給js一個生存環境。
Js程式碼再執行之前,瀏覽器會給js一個生存環境就window。
他會分成兩個模組,一個就記憶體,一個叫執行。記憶體模組在程式碼執行前就完成了,存放關鍵字var和function,每存放一個變數就會生成一個記憶體地址。
在執行模組 a=12; 先通過記憶體地址查詢有沒有a,有就直接賦值給a,沒有就是undefined
賦值
- 基本資料型別 就直接賦值
- 引用資料型別 把記憶體地址賦給變數
var obj={
name:"zhangsan"
}
var person=obj;
person.name="lisi"
console.log(obj.name)
基本資料型別在賦值的時候就是簡單的操作值
引用資料型別在賦值的時候,把記憶體地址賦值給變數,在操作引用資料型別的時候,首先通過記憶體地址去找到裡面的東西,然後操作。
(引用資料型別在賦值的時候,首先開闢一個堆記憶體,存放裡面的程式碼塊,然後把記憶體地址賦值給變數。在操作這個變數時候會通過記憶體地址去查詢,然後修改裡面的東西)
引用資料型別 object array function 前兩個都是以鍵值對的形式存放,而後一個以字串的形式存放。
所以說try catch在不得已的情況下才去使用
課程
函式封裝是一種函式的功能,它把一個程式設計師寫的一個或者多個功能通過函式、類的方式封裝起來,對外只提供一個簡單的函式介面。當程式設計師在寫程式的過程中需要執行同樣的操作時,程式設計師(呼叫者)不需要寫同樣的函式來呼叫,直接可以從函式庫裡面呼叫
Scroll
- 我們學習的client和offset scrollwidth和scrolleheight都是隻讀的屬性
- Scrolltop和scrollleft是可讀寫的屬性
Scroltop的最小值是0存在邊界值 當他為0是回到容器的頂部
最大值是真實的高度-當前容器一螢幕的高度 scrollheight-clientheight