如何在整个HTML页面中访问Javascript / JQuery对象方法

时间:2018-04-09 18:03:08

标签: javascript jquery

我想创建一个Javascript / JQuery对象,该对象可以容纳许多可以通过HTMl页面访问的功能,但是我一直遇到错误。下面是我的外部JS文件

function AppPage(settings){
    function save(formid){
        //get form data and save
    };
    function delete(rowid){
        //get rowid and delete via ajax
    }
}

现在我想初始化Javascript对象并在整个

中访问它
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <script src="../js/app.page.js"></script>
    <script type="text/javascript">
        $(function(){
               var app_page = new AppPage({
                      base: "http://localhost/app"
               });
          });
   </script>
   </head>
   <body>
     <a onclick="app_page.save('save something')">Example Save Link</a>
     <a onclick="app_page.delete('delete something')">Example Delete Link</a>
  </body>

当我尝试调用这些函数时,我得到一个错误

  

ReferenceError:未定义app_page

我怎样才能更好地组织这个?

4 个答案:

答案 0 :(得分:0)

你可以这样做:

<script>
    var app_page = {
        save: function (formid) {
            //get form data and save
        },

        delete: function (rowid) {
            //get rowid and delete via ajax
        },
    }
</script>

然后你可以这样打电话给他们:

app_page.save("formid")
app_page.delete("rowid")

答案 1 :(得分:0)

通过对象,我猜你的意思是构造函数和构造函数的定义&#39; AppPage&#39;不正确。即使你的javascript也不行。

正确的方式

function AppPage(){
   this.save = function(formid){
     //get form data and save
   };
   this.delete = function(rowid){
     //get rowid and delete via ajax
   };
}
var app_page = new AppPage();

如果你想让它成为一个对象,你必须使用以下语法。

var app_page = {
   save: function(formid){
     //get form data and save
   },
   delete: function(rowid){
     //get rowid and delete via ajax
   }
};

**请勿使用&#39;删除&#39;,它是保留的关键字。

答案 2 :(得分:0)

您需要将AppPage的子函数声明为属性。您还需要存储您传入的settings对象,否则您的子函数将无法引用:

function AppPage(settings){

    // Store the settings
    this.settings = settings;

    // Define the "save" method
    this.save = function(formid){
        console.log("Save " + formid + " to " + this.settings.base);
    };

    // Define the "delete" method
    this.delete = function(rowid){
        console.log("Delete " + rowid  + " to " + this.settings.base);
    }
}

答案 3 :(得分:-1)

虽然不建议使用全局变量,但在变量初始化之前var使其成为您在其中定义的函数的本地变量。在app_page之前删除var并且它将起作用。

另一方面,我建议您创建自己的全局对象,在其中定义所有功能。

此外,您的app_page对象中的函数未公开,您必须将它们分配给定义它们的对象,并将它们附加到基础对象,以便获得this.save = function()...