方法一:構造方法。
- function coder(){
- this.name = '小王';
- this.job = '程式員';
- this.coding = function ()
- {
- alert('我正在寫代碼');
- }
- }
- var coder=new coder();
- alert(coder.name);
- coder.coding();
複製代碼
方法二:Factory 方法。
- function createCoderFactory(){
- var obj=new Object();
- obj.name = '小王';
- obj.job = '程式員';
- obj.coding = function (){
- alert('我正在寫代碼');
- };
- return obj;
- }
- var coder = createCoderFactory();
- alert(coder.name);
- coder.coding();
複製代碼
但Factory 方法和構造方法都有著一個相同的缺點,就是每建立一個執行個體,都會執行個體化該類的每個函數。
方法三:原形鏈。
- function coder(){}
- coder.prototype.name = '小王';
- coder.prototype.job = '程式員';
- coder.prototype.coding = function(){
- alert('我正在寫代碼');
- };
- var coder = new coder();
- alert(coder.name);
- coder.coding();
複製代碼
但原行鏈有個缺點就是它所有屬性都共用,只要一個執行個體改變其他的都會跟著改變。如:
- var coder1 = new coder();
- var coder2 = new coder();
- alert(coder1.name); /*顯示“小王”*/
- coder2.name = '老王';
- alert(coder1.name); /*示“老王”*/
- alert(coder2.name); /*這個也顯示“老王”*/
複製代碼
方法四:混合方式。
以上三種都有著各自的缺點,所以我們要加以改進。
- function coder(){
- this.name = '小王';
- this.job = '程式員';
- }
- coder.prototype.coding = function(){
- alert('我正在寫代碼');
- };
複製代碼
方法五:動態原鏈。
要解決前三種的缺點,還有一種方法。
- function coder(){
- this.name = '小王';
- this.job = '程式員';
- if (typeof(coder._init) == 'undefined'){
- this.coding = function ()
- {
- alert('我正在寫代碼');
- };
- this._init = true;
- }
- }