簡體   English   中英

OOP Javascript-參考錯誤

[英]OOP Javascript - Reference Error

因此,我試圖將我的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>

對此感到嚴重困惑。 有人可以幫忙嗎?

無論您將代碼放在何處,這都應該起作用

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"

您必須在類定義中正確啟動函數:

this.get_string = function(){...}

您的“方法”不是對象的屬性,您已將它們分配給(隱含)全局變量。 采用

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;
    };
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM