2011-06-15 83 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); 
} 
相关问题