如何使用构造函数方法创建一个javascript类来启动新对象/实例?

时间:2013-10-03 23:37:55

标签: javascript oop constructor

我正在尝试使用javascript。我正在尝试制作一个“课堂”,但它并没有像它应该的那样工作。我在启动MyClass的新实例时遇到了问题。看到j​​s小提琴。可以像在php中一样向MyClass添加构造函数吗? 我也不确定这是在javascript中定义“类”的方式。所以任何帮助都会受到更多的赞赏。

http://jsfiddle.net/kasperfish/JnvFS/

    var MyClass={
        test:'hello',

        hallo: function(){
            alert(this.test);
        },

        setTest: function(x){
            this.test=x;
        }

    }

MyClass.hallo();
MyClass.setTest('world');
MyClass.hallo();

//not working because MyClass is/does not have a constructor
x= new MyClass;//*
x.hallo(); 
  

* firebug:TypeError:MyClass不是构造函数

3 个答案:

答案 0 :(得分:2)

在JavaScript中,类的构造函数只是一个函数,成员可以在那里设置,也可以使用prototype对象设置。例如:

function MyClass(someArgument) {
   // construction, init members of this
   this.someField = someArgument;
   this.test = 'a test';
}

// in addition, all members of `prototype` are automatically set on every 
// new instance of MyClass.
MyClass.prototype.hallo = function(){
         alert(this.test);
};

然后

var inst = new MyClass(42);
inst.hallo();

我建议你在JavaScript中阅读基于原型的OOP。它绝对不同于您可能习惯使用的PHP,它通常感觉不太直观。

答案 1 :(得分:1)

你必须让你的MyClass对象成为这样的函数:

var MyClass = function() {
    this.test = 'Hello';
};

MyClass.prototype.hello = function() {
    alert(this.test);
};

MyClass.prototype.setTest = function( x ) {
    this.test = x;
};

var myInstance = new MyClass();

myInstance.hello();
myInstance.setTest('World');
myInstance.hello();

答案 2 :(得分:1)

好的,首先你应该知道javascript没有说“类”,javascript数据结构确实是由对象构成的,但正如你从上面的代码中看到的那样,对象本质上是键值对,与其他语言如php不同,在javascript中实现OOP是非常不同的。

如果您想使用构造函数来创建对象的实例,那么尝试使用函数,construtor创建您的“类”,也许这样:

function MyClass(){
    this.test ='hello';
    this.hallo = function(){
                     alert(this.test);
                 };

    this.setTest = function(x){
                       this.test=x;
                   };
}

var myClassInstance = new MyClass();
myClassInstance.hallo();
myClassInstance.setTest('world');
myClassInstance.hallo();

我希望这有帮助