繁体   English   中英

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

[英]How to make a javascript class with a constructor method to initiate new objects / instances?

我正在尝试使用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不是构造函数

在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,它通常不会非常直观。

你必须使你的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();

好吧,首先你应该知道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();

我希望这有帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM