2011-08-21 51 views
4

我想知道如何在Javascript中使用類似於Python中的「類」。就拿這裏列出的Python類和函數:Javascript中的Python類「類」

class one: 
    def foo(bar): 
     # some code 

功能「富」將與one.foo(bar)被調用。
等同於JS的是什麼?我懷疑它會是這樣的:

var one = { 
    foo: function(bar) { 
     // JavaScript 
    } 
}; 

謝謝。

+6

SO問題不能代替整本教程/書籍。去抓一個,如果你覺得一個對象的字面類似於一個類,你可能需要它... – delnan

回答

9

本機方式在JavaScript創建類是先定義構造函數:

function MyClass() { 
} 

和原型:

MyClass.prototype = { 
    property: 1, 
    foo: function(bar) { 
    } 
}; 

然後可以創建MyClass的實例:

var object = new MyClass; 
object.foo(); 

添加靜態方法:

MyClass.staticMethod = function() {}; 

MyClass.staticMethod(); 

擴展MyClass的:

function SubClass() { 
} 
SubClass.prototype = new MyClass; 
SubClass.prototype.bar = function() { 
}; 

var object = new SubClass; 
object.foo(); 
object.bar(); 
6

看一看this link。用Javascript做OO編程有不同的方法。這裏的細節太多了,無法解釋。

如果您認真對待Javascript編程,您應該閱讀this book

如果你想做真正沉重的面向對象編程,我建議看看Coffee Script

+0

我剛剛開始使用CoffeeScript,但到目前爲止,我真的很喜歡它的類的實現:http:// jashkenas.github.com/coffee-script/#classes – peterjmag

6

Classy是一個試圖將JavaScript類加入JavaScript的JavaScript庫。

2

JavaScript並沒有真正的類。它具有的是原型 - 一個用作新對象模板的對象實例。

您創建對象的方式是使用文字構造函數。它很簡潔,但是它的構造中不能添加或使用複雜的語句。

另一種方法是,像這樣:

function SomeClass(value) { 
    if (value < 0) { 
     this.field = -1; 
    } else { 
     this.field = value; 
    } 
} 

一個新的實例是這樣創建的:

var obj = new SomeClass(15); 

這使您可以使用條件邏輯,用於循環和其他更復雜的編程技術建設你的對象。但是,我們只能添加實例字段而不能添加「類」字段。您可以添加班級字段,修改對象創建者函數的prototype

MyClass.prototype.fieldSquared = function() { 
    return this.field * this.field; 
} 

This給對象的創建和原型在Javascript的更完整的概述。