2012-12-14 73 views
1

我知道有很多關於使用原型的材料,但似乎有很多不同的建議方法,並且我試圖找到它。我真的只是在尋找關於下面結構的反饋,如果你看到任何問題。提前致謝。使用Javascript原型的最佳實踐

function Class(){} 

Class.prototype = { 
    MethodOne: function() { 

    }, 
    MethodTwo: function() { 

    }, 
    MethodThree: function() { 

    } 
} 
+0

資本F在功能? – bits

+3

要回答你的問題,它看起來語法正確。但這一切都取決於你的用例。你是否試圖把它變成一個你最終會繼承其他對象的對象? – bits

+0

你可以找出原型的目標是什麼,用細節更新你的問題,並在評論中通知。 – bits

回答

2

整體完美!這也是我創建我的課程的方式。這裏有一些小修改:

function Class() { 
    return this; 
} 

Class.prototype = { 
    methodOne: function() { 

    }, 
    methodTwo: function() { 

    }, 
    methodThree: function() { 

    } 
} 

1)更改方法名稱以小寫字母開頭。只是爲了約定。
2)讓你的構造函數返回這個(新創建的對象)。
3)一旦你創建了類,你可以使用它像:

var obj = new Class(); 
obj.methodOne(); 
+1

沒有必要把'return this'放在構造函數中。這是一種默認行爲。但是很高興知道,構造函數可以返回不同於this的對象,但它不能返回原始值。 – dreame4

2

你的例子是非常簡單和語法正確。不過,我想與你分享我的想法。

首先,你完全替換你的Class構造函數的原型對象。這很好,但是您從Class創建的對象中失去對構造函數的引用。使用你的代碼:

var a = new Class(); 
a.constructor; // => function Object() { [native code] } 

,那豈不是更好,如果constructor屬性指向Class,因爲它是一個真正的構造函數?要修復它,您需要將constructor屬性添加到Class原型。像:Class.prototype.constructor = Class

其次,我通常會看到從小寫字母開始的對象方法。這是一個慣例,但這就是所有本地對象的方法定義的方式。例如,查看默認Date對象(Date.prototype.*)中定義的方法。所有這些都以小寫字母開頭。