簡體   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