1.面向對象時,只關注對象提供的功能,不關注其內部的細節。 如JQUERY
2.面向對象時一種通用思想,並非只有編程中能用,任何事情都可以用。如公司里的上傳下達
3.面向對象編程(OOP)的特點,傳統的書本會說:多態,封裝,繼承三大特點
應該還能理解成抽象,封裝,繼承三大特點
抽象:抓住核心問題
封裝:不考慮內部實現,只考慮功能使用
繼承:從已有對象上,繼承出新的對象
4.對象的組成
方法---------函數:過程,動態的
屬性---------變量:狀態,靜態的
變量和函數是自由的,屬性和方法屬於一個對象
5.this:當前的方法屬於誰,this就是指誰 除了在函數面前有new的時候
function Person(name,sex) { this.name=name; this.sex=sex;
alert(this);
}
var p1 = new Person("leo","男");
在這里的this是Object
原因是這個函數相當於
function Person(name,sex) { var this = new Object(); //雖然在JS里面不能這么寫,但是差不多是這個意思,創建一個新的對象。 this.name=name; this.sex=sex; //給this對象賦屬性 return this; //返回this }
6.構造對象的函數稱之為構造函數,不具備實際功能,只能用來構造對象 如:var arr = new Array();
7.工廠方式構造對象。工廠的工作流程是這樣的a.原料 b.加工 c.出廠。用工廠方式構造對象也是一樣的,首先要創建一個對象(加工),然后給對象添加方法和屬性(加工),最后返回對象(出廠)。例子:
function CreatePerson(name,sex) { var person = new Object(); //原料 person.name=name; person.sex=sex; person.show=function() { alert(this.name); } //加工,給對象添加方法和屬性 return person; //出廠,返回對象 }
8.工廠的方式有2個問題。問題一:沒有new;問題二:每個對象都有一套自己的函數,極其浪費資源。
為了解決問題一:
function Person(name,sex) { this.name=name; this.sex=sex; } var p1 = new Person("leo","男");
用了一個new 把構造函數內部的 創建對象和返回對象給省去了。
為了解決問題二:
Person.prototype.show=function() { alert(this.name); }
給原型添加了方法,基於這個構造函數創建出來的對象就都具有這個方法了,而且是共用一個方法,而不是像工廠模式那樣的每個對象new一個function,這個極大地節省了資源,就像工廠生產蛋糕的模式,雖然生產出那么多得蛋糕,但是用的卻是一個模子,而不是每生產一個蛋糕就用一個模子。
類---------------------模子
對象(實例)-----------蛋糕
原型一個重要應用-----擴展功能
9.為了區別普通函數和構造函數,構造函數首字母大寫。
10.混合寫法:構造函數放屬性,原型放方法。
11.alert(typeof Date); 彈出function 因為Date是構造函數