Linux核心移植
概述
做一一些事,可以將他們封裝為函式,反覆呼叫。
如果這些事很多,且不同事情之間有關聯關係,假如十件事寫成10個函式
沒有邏輯無序編排,且很有可能多個事情會公用資料。
編寫後的程式碼雜亂無章。
OOP:封裝資訊,用特徵與行為將一類事物提煉抽象出來。
基本語法同java,也借鑑了python的語法。
資料型別同java,下面就是一些需要記憶的點。
建立物件
1-建構函式建立
var stu = new object() stu.name="zhang" stu.hobby="rap" stu.draw=function(){}
2-字面量方式建立物件
var stu = { name:"zhansan", age:18, draw:function(){
console.log(this.name)
} }
以key:value對的形式描述物件,key必須是字串,因為此約定,不用加雙引號。
stu["name"]===stu.name後者簡單
但是當不知道屬性名時才會不得已使用【】
例如遍歷物件
for(let key in stu){ console.log(stu[key]) }
不知道物件的屬性名,也不知道有多少屬性
key變數指向stu的屬性名。
this
解析器在呼叫函式時每次都會向函式內部傳遞一個隱含的引數this,
this指向的是函式執行的上下文,白話就是.前面的物件。
stu.draw() 和python中的self一樣
alert(123)呢?
對於js中的函式而言,this指向的是window物件。
即便是自定義的函式,也是掛在window物件下面。
var stu = { name:"zhangsan", draw(){ console.log(this) } }
var stu1_draw = stu.draw
stu.draw() //{name: "zhangsan", draw: ƒ}
stu1_draw()//Window {window: Window, self: Window, document: document, name: "", location: Location, …}
js中除了預設傳this,還會預設傳陣列物件arguemnts,是個陣列,裡面放所有傳進來的引數,可以用索引操作實參。
js中的類模板
批量建立某類物件
如果建立物件每次都var stu={}
且還是相同屬性和行為的物件,就太麻煩了
funciton Student(name,age){ this.name =name this.age=age this.draw=function(){ console.log(this.name+this.age) } }
1--Student("dage",20) 不加new,同樣可以建立物件,只不過裡面的this指的就是window,就相當於呼叫了一個函式,為全域性window建立了兩個變數
2--加上new之後,new做了一件事,建立一個新的物件,讓函式內部的this指向新的物件。此時的函式就是建構函式。 sut1 = new Student("zhansan",19) stu2 = new Student("lisi",19)
Student()就是一個普通函式,如果加了new就變成了建構函式。
而Studen大寫就是一個約定而已,完全可以小寫,但是規範要遵守。
es6中引入了class關鍵字,替換上面的function
class Student{ constructor(name,age){ this.name=name; this.age=age;
this.draw=function(){} }
}
寫的多了,還趕不上上面的簡便。
但是陷阱是函式物件,每次建立物件都單獨建立了函式物件,造成記憶體浪費,但是這個函式應該是共享的一塊記憶體。
js提供瞭解決方案---原型
原型
所有學生相同的行為全部放在原型裡面----相當於一塊共享記憶體。
所有的物件都有一個prototype物件,用來指定原型
建立任何一個函式,不管你是不是建構函式,解析器都會向函式中新增一個prototype屬性,即原型物件。
如果是一個普通函式,那麼原型物件對它而言沒有用處。
class Student{ constructor(name,age){ this.name=name; this.age=age; }
draw()()//提出來即可 }
funciton Student(name,age){ this.name =name this.age=age
//設定原型物件,此物件裡面的全部共享。 this.prototype.draw=function(){ console.log(this.name+this.age) } }
json資料
不同語言交流方式
json和js的物件表達方式很像
但是key必須用雙引號引起來,單引號不可以,跟js的物件長得太像了,可能這就是為什麼js物件的key不加雙引號吧
{ “name ”:"zh", "age":18, "hello":function(){ //幾乎不會傳函式 console.log("hello world") } }
ajax非同步載入資料後端傳來的都是json格式資料
一般除錯看到的資料已經轉為了js物件
看十遍不如自己寫一遍!鞏固基礎,縱橫開拓!