为什么这个编辑原型不起作用?

时间:2011-06-15 14:19:02

标签: javascript

我想在函数构造函数(类)的原型中添加一个常量,但它会以未定义的原因返回?

function myClass(){

}

$(document).ready(function(){

  myClass.prototype.age = 22;

  window.alert(myClass.age);

});

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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);
}