2011-06-15 81 views
4

我想給函數構造函數(類)的原型添加一個常量,但它會以未定義的原因返回。爲什麼不編輯原型作品?

function myClass(){ 

} 

$(document).ready(function(){ 

    myClass.prototype.age = 22; 

    window.alert(myClass.age); 

}); 
+0

除了「爲什麼這一工作犯規」的事實,它缺少」,也非描述。 – cwallenpoole 2011-06-15 14:22:39

+0

對不起,我應該檢查更好的問題,感謝編輯... – Exitos 2011-06-15 14:50:48

回答

8

因爲它的原型繼承。

下面將工作:

myClass.prototype.age = 22; 

var myobj = new myClass(); 
window.alert(myobj.age); 

在您的例子要添加屬性的類原型。當你實例化該類的一個對象時,你只會看到這些。

達到你想要什麼,只是依靠一個expando屬性:

myClass.age = 22; 

window.alert(myClass.age); 

如果它有幫助的,想到的第一個樣品在C#類聲明的公共財產。您只能在實例化時訪問它。

第二個例子就像在C#中的一個類上聲明一個公開的static屬性。你不需要實例化它來訪問它。

編輯註釋

要在類的方法中訪問的年齡,使用此this

myClass.prototype.GetAge = function(){ 
    alert(this.age); 
} 
+0

,他將如何從_within_方法'myClass'訪問'myClass.age'? – Alnitak 2011-06-15 14:26:11

+0

@Alnitak他會使用'this'。請參閱編輯。 – 2011-06-15 14:32:43

+0

不,這不起作用,因爲在第二個版本中'.age'不在原型中,它是構造函數的一個屬性。 – Alnitak 2011-06-15 14:35:56

1

使用something.bar只有當something是一個類的實例工作

我創建「類的靜態」變量模式如下:

var MyClass = function() { 

    if (typeof this.constructor.static === 'undefined') { 
     // create (and initialise) default static variables 
     this.constructor.static = { age: 22 }; 
    } 

    // create a local alias 
    var static = this.constructor.static; 

    // now you can use "static.variableName" as a class static 
    alert(static.age); 
} 
相關問題