我尝试创建对象和调用函数时未定义函数

时间:2012-11-11 18:00:46

标签: javascript jquery html

我正在尝试创建一个对象,然后在该对象上调用initialize函数。但是我初始化没有定义。这是我的代码:

var SomeJSObj = function () {
    function Initialize() {
        $(document).ready(function () {
            alert('hello');
        });
    };
};

当我创建SomeJSObj的新对象并调用Initialize时,我的函数未定义。有人可以帮我跟踪错误吗?

5 个答案:

答案 0 :(得分:1)

应该是这样的,因为你想让Initialize函数公开:

var SomeJSObj = function () {
    this.Initialize = function() {
        $(document).ready(function () {
            alert('hello');
        });
    }
};

var t = new SomeJSObj();
t.Initialize();​

答案 1 :(得分:1)

Initialize目前无法在SomeJSObj构造函数之外访问。您需要在每个实例或原型上公开它:

var SomeJSObj = function () {
    this.Initialize = function () {
        $(document).ready(function () {
            alert('hello');
        });
    };
};

在原型上效率更高,因为只有一个函数副本必须存在于内存中,而不是每个实例都有一个:

var SomeJSObj = function () {};
SomeJSObj.prototype.Initialize = function () {
    //Do stuff
};

答案 2 :(得分:1)

首先,$(document).ready之外的函数定义:

$(document.ready(function() {
    ...
});

问题是你的方法应该使用前缀this.

在对象上定义
this.Initialize = function() {
    ...
};

所以总而言之:

$(document).ready(function() {

    var SomeJSObj = function () {

        this.Initialize = function() {
             alert('hello');
        };

    };

});

要调用您的方法,您必须创建一个实例:

var instance = new SomeJSObj(); // make sure this in in $(document).ready

并调用方法:

instance.initialize(); // works

答案 3 :(得分:1)

你可以这样做,简单方便。

var SomeJSObj = function () {
    this.Initialize=function() {
        $(document).ready(function () {
            alert('hello');
        });
    };

};

var x = new SomeJSObj();
x.Initialize()

答案 4 :(得分:0)

这就是你想要的。请参阅the fiddle

var SomeJSObj = function () {
    this.initialize();
};
SomeJSObj.prototype.initialize = function() {
  $(document).ready(function () {
      alert('hello');
  });
};
new ​SomeJSObj​();​