2012-10-29 81 views
1

因此,我試圖將我的web應用程序轉換爲基於OOP的應用程序,因爲這是我首先學會編程的方式。我有我的所有功能和一切定義,但我遇到了一個問題。OOP Javascript - 參考錯誤

讓我們在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> 

對此非常困惑。誰能幫忙?

+0

使用'的ToString()'代替。 – Brad

+0

你可以做一個JSFiddle(http://jsfiddle.net)?你的第一個例子,你聲稱爲你工作,實際上並不工作。 –

回答

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" 
+0

這是工作,我只是顯然沒有通過控制檯訪問對象。感謝您的傑出答案。 – StephenRios

+0

這很可能是因爲'myObject'的定義在某個函數範圍內。如果您可以將其修改爲'window.myObject = function(x){...}',您將可以從控制檯訪問它。 – techfoobar

-1

你必須正確地啓動類定義的功能:

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

您的「方法」不是您的對象的屬性,您已將它們分配給(implizit)全局變量ABLES。使用

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

順便說一句,這種方法被通稱爲toString,那麼它也將當對象被澆鑄爲字符串中使用。你可能需要使用當地的「私有」變量,而不是公共財產.string,使您的getter和setter方法是多餘的:

function myObject(string) { 
    // the parameter is like 
    // var string; 
    this.toString = function() { 
     return string; 
    }; 
    this.setString = function(new_string) { 
     string = new_string; 
    }; 
}