1

ですから、私は自分のWebアプリをOOPベースに変換しようとしています。それが、最初にプログラミングを学んだ方法だからです。すべての関数とすべてを定義しましたが、問題が発生しています。

index.phpで、スクリプトタグを開き、オブジェクト関数を作成するとします。

<script type="text/javascript">
function myObject(_string){
   this.string = _string;

   this.get_string = function(){
       return this.string;
   }
}
</script>

大したことはありません。

今私がそれを呼ぶならば、私がこれをするならばそれはうまく働きます:

var my_object = new myObject("this is a string");
console.log(my_object.get_string) // logs "this is a string"

しかし、それをdomReadyでラップすると、オブジェクトは作成されず、my_objectを呼び出すと参照エラーが返されます。

$(document).ready(function() {
     var my_object = new myObject("this is a string");
     console.log(my_object); // returns reference error
}); 

オブジェクト内に関数を埋め込んで呼び出そうとすると、同じ問題が発生します。

<script type="text/javascript">
    function myObject(_string){
       this.string = _string;

       this.get_string = function(){
           return this.string;
       }

       this.set_string = function(new_string){
            this.string = new_string;
       }
    }

    my_object = new myObject("this is a string");
    my_object.set_string("this is a new string"); // returns reference error
    my_object.set_string() // Returns reference error
    my_object.set_string // returns a string containing the function
</script>

これについて真剣に混乱しています。誰か助けてもらえますか?

4

3 に答える 3

2

これは、コードが配置されている場所に関係なく機能するはずです

function myObject(_string){
   this.string = _string;

   this.get_string = function(){
       return this.string;
   };

   this.set_string = function(new_string){
        this.string = new_string;
   };
}

そして、次のように呼び出します:

var my_object = new myObject("this is a string");
console.log(my_object.get_string()) // will log "this is a string"
于 2012-10-29T18:55:03.047 に答える
-1

あなたの「メソッド」はあなたのオブジェクトのプロパティではなく、それらを(暗黙の)グローバル変数に割り当てました。使用する

function myObject(_string) {
    this.string = _string;
    this.get_string = function() {
        return this.string;
    }
}

ところで、このメソッドは便利に呼び出されtoString、オブジェクトが文字列にキャストされるときにも使用されます。また、パブリック プロパティの代わりにローカルの「プライベート」変数を使用する.stringと、ゲッターとセッターが不要になります。

function myObject(string) {
    // the parameter is like 
    // var string;
    this.toString = function() {
        return string;
    };
    this.setString = function(new_string) {
        string = new_string;
    };
}
于 2012-10-29T18:57:01.983 に答える
-1

クラス定義内で関数を適切に開始する必要があります。

this.get_string = function(){...}
于 2012-10-29T18:55:36.037 に答える