1.工廠模式
functioncreateperson(name,age,job)
return
o }
var p1 = createperson('李四', 18, '程式設計師')
var p2 = createperson('張三', 20, '產品經理')
問題:無法識別物件的型別
2.建構函式模式
functionperson(name,age,job)
} var p1 = new person('李四', 18, '程式設計師')
var p2 = new person('張三', 20, '產品經理')
使用new操作符,建立例項經歷下面四個過程:
1,建立乙個新物件;
2,將建構函式的作用域賦給新物件(this就指向了這個新物件);
3,執行建構函式中的**(為這個物件新增屬性與方法);
4,返回這個新物件。
建立的物件p1和p2都有乙個constructor屬性,該屬性都指向person
p1.constructor === p2.constructor //true
往往我們通過instanceof來檢測建立例項的型別
p1 instanceof object //true
p1 instanceof person //
true
p2 instanceof object //
true
p2 instanceof person //
true
優點:可以識別建立例項的型別
缺點:建構函式中的方法在建立每乙個例項中都會被重新建立
3.原型模式
我們建立的每乙個函式都有乙個prototype(原型)屬性,該屬性指向乙個包含這個函式建立的所有例項共享的屬性和方法的物件(原型物件),該原型物件有乙個constructor(建構函式)屬性,此屬性指向該原型物件所在的建構函式,當呼叫該建構函式建立例項後,新生成的例項物件有乙個[prototype]屬性指向原型物件。
functionperson()
person.prototype.name = '張三'person.prototype.age = 18person.prototype.job = '程式設計師'person.prototype.sayname = function
()
var p1 = new person()
isprototypeof() 確定例項和原型物件之間的關係是否建立
person.prototype.isprototypeof(p1) //true
object().getprototypeof()獲取例項的[prototype]
object.getprototypeof(p1) === person.prototype //true
hasownproperty()判斷乙個屬性是存在例項還是存在原型物件中
p1.hasownproperty('name') //false
p1.name = '李四'p1.hasownproperty('name') //
true
delete
p1.name
p1.hasownproperty('name') //
false
更簡單的原型語法
functionperson()
person.prototype =
}
以物件字面量的形式,給原型物件新增屬性和方法,相當於重寫預設的prototype,這樣做後,會改變原型物件的constructor屬性值,此時原型物件的constructor不再指向建構函式person了,而是指向object()建構函式。
問題:由於原型物件屬性和方法的共享性,我們定義原型物件的某個屬性值為引用型別,當我們在某個例項中修改該屬性值會導致其他例項的屬性值也隨之改變。
4.組合模式
這是建立自定義類最常見的模式,採用建構函式定義例項屬性,原型模式建立可共享的屬性和方法,此舉實現了每乙個例項都有乙份獨立的屬性副本,又避免了方法的重複建立,最大限度的節省了記憶體,而且這種模式還支援向建構函式傳遞引數。
functionperson (name,age,job)
person.prototype =
} var p1 = new person('張三', 18, '程式設計師')
5.動態原型模式將所有的資訊都封裝在建構函式中,在建構函式中初始化原型,這樣只有在初次呼叫此建構函式時才會執行初始化原型的方法。
//動態原型模式
function
person (name,age,job)
}}var p1 = new person('張三', 18, '程式設計師')
6.寄生建構函式模式
functioncreateperson(name,age,job)
return
o }
var p1 = new createperson('李四', 18, '程式設計師')
除了建立例項時使用new操作符以外和工廠模式沒有區別,
7.
穩妥建構函式模式
functioncreateperson(name,age,job)
return
o }
var p1 = createperson('李四', 18, '程式設計師')
Matlab自定義函式的幾種方法
function y myfun x y x 2 以上是myfun.m檔案,matlab命令列使用 clear clc y myfun 2 inline方式類似c 裡的內聯函式,一般較簡單的函式適合內聯。定義方式 f inline 函式表示式 變數1 變數2 以下是例子 clear clc f in...
Matlab自定義函式的幾種方法
1 函式檔案 呼叫命令檔案 需單獨定義乙個自定義函式的m檔案 2 函式檔案 子函式 定義乙個具有多個自定義函式的m檔案 3 inline 無需m檔案,直接定義 4 匿名函式 5 syms subs 無需m檔案,直接定義 6 字串 subs 無需m檔案,直接定義 7 直接通過 符號定義.呼叫函式檔案 ...
js自定義物件及其方法
js中定義類的方式有很多種 1 工廠方式 function car return ocar var car1 car var car2 car 呼叫此函式時將建立新物件,並賦予它所有的屬性和方法。使用此函式可以建立2個屬性完全相同的物件。當然我妹可以通過給它傳遞引數來改版這種方式。function ...