標籤:使用 工廠 修改 範圍 img cto name function 類型
1、建立函數:
(1)函式宣告:
function myfun(){};//存在聲明得瑟提升,整個函數都會提升
(2)函數運算式:
var myfun = function(){}//不存在函數的提升
2、建立對象:
1)單一對象
(1)Object建構函式
(2)對象字面量
2)建立很多個物件:
(1)原廠模式(不能知道對象的類型)
function Obj(name,age,job){
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.say = function(){};
return o;
}
var person1 = Obj(‘‘, ‘‘, ‘‘);
(2)建構函式模式(以這種方式定義建構函式是定義在global對象上的)
使用 new 關鍵字建立新執行個體的步驟:
(1)建立一個新對象
(2)將建構函式的範圍賦給新對象(此時this指向新對象)
(3)執行建構函式中的代碼(為這個新對象添加屬性)
(4) 返回新對象。
新對象都有一個constructor屬性,該屬性只想建構函式,如person1的constructor指向Person
注意:檢測物件類型的方法(1)constructor(2)instanceof(會檢測出既是object的執行個體,也是Person的執行個體)
(3)原型模式
只要創造一個函數,就會為該函數建立一個 prototype屬性,指向函數的原型對象。所有原型對象都會獲得一個指向prototype屬性所在函數的的指標,即:constructor指標
如:Person函數的prototype指向Person的原型對象“Person Prototype”.person1 和person2de _proto_指向“Person Prototype”;
Person Prototype 對象中含有:constructor、name、age、say屬性,其中constroctor指向Person
注意:在執行個體對象中添加一個同原型對象裡的誰能夠同名的屬性時,這個屬性就會屏蔽原型對象中的同名屬性,換句話說,新添加的屬性只會組織我們訪問原型對象中的那個屬性,而不會修改原型對象中的屬性。使用delete可以完全刪除執行個體屬性:delete person.name;
(4)組合使用建構函式和原型模式
因為原型模式存在參考型別會被修改的問題,所以需要組合使用建構函式模式和原型模式
建構函式中定義執行個體屬性,原型模式中定義方法和共用屬性
JS 各種建立