1

我正在尝试使用 javascript。我正在尝试创建一个“类”,但它并没有像它应该的那样工作。我在启动 MyClass 的新实例时遇到问题。请参阅 js 小提琴。是否可以像在 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 不是构造函数

4

3 回答 3

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 的那种,而且它通常感觉不是很直观。

于 2013-10-03T23:42:32.467 回答
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();
于 2013-10-03T23:44:33.950 回答
1

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

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

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();

我希望这有帮助

于 2013-10-03T23:49:56.240 回答