1

所以我试图将我的网络应用程序转换为基于 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

您必须在类定义中正确启动您的函数:

this.get_string = function(){...}
于 2012-10-29T18:55:36.037 回答
-1

您的“方法”不是您对象的属性,您已将它们分配给(隐含)全局变量。采用

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;
    };
}
于 2012-10-29T18:57:01.983 回答