Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在对象内调用函数_Javascript - Fatal编程技术网

Javascript 在对象内调用函数

Javascript 在对象内调用函数,javascript,Javascript,我创建了一个对象,如下所示 function StartObj() { var events = { a: function() { alert("hello"); }, b = function() { lightbox(events.a); } }; this.main = function() { $("#objId").click(events.b); } } $

我创建了一个对象,如下所示

function StartObj() {
   var events = {
      a: function() {
         alert("hello");
      },
      b = function() {
         lightbox(events.a);
      }
   };

   this.main = function() {
      $("#objId").click(events.b);
   }

}

$(document).ready(function(){
      var _start_obj = new StartObj();
      _start_obj.main();
   });
在另一个文件中

function lightbox(funcPtr) {
   alert(funcPtr);
}

警报正在报告功能未定义;还有谷歌chrome控制台。

你确定吗?这是我的作品。。。我刚刚添加了对
x.b()
的调用来启动它

var x = {

a: function() {
   alert("hello");
},

b: function() {
       var that = this;
       mayhem(that.a);
    }

}

function mayhem(funcPtr)
{
   funcPtr();
}

x.b();

你确定吗?这是我的作品。。。我刚刚添加了对
x.b()
的调用来启动它

var x = {

a: function() {
   alert("hello");
},

b: function() {
       var that = this;
       mayhem(that.a);
    }

}

function mayhem(funcPtr)
{
   funcPtr();
}

x.b();

你可能不会做你认为你会做的事

var=this
是无用的,
这个
实际上不是x,而是
x.b
函数的接收器

这意味着如果你这样做

x.b();
var f = x.b;
f();
这很有效

但如果你这样做了

x.b();
var f = x.b;
f();
这不管用

如果要确保
x.b
的工作不依赖于功能接收器,可以执行以下操作:​

var x = function(){
    var x ={
       a: function() {
           alert("hello");
       } 
    };
    x.b = function() {
        mayhem(x.a);
    }
    return x;
}();
另一种方法是创建构造函数并使用
new
操作符生成x


关于您的编辑:

如果要访问main,请执行以下操作:

function StartObj() {
   var events = {
      a: function() {
         alert("hello");
      }
   };

   events.b = function() {
         lightbox(events.a);
   };

   this.main = function() {
      $("#objId").click(events.b);
   }
}

你可能不会做你认为你会做的事

var=this
是无用的,
这个
实际上不是x,而是
x.b
函数的接收器

这意味着如果你这样做

x.b();
var f = x.b;
f();
这很有效

但如果你这样做了

x.b();
var f = x.b;
f();
这不管用

如果要确保
x.b
的工作不依赖于功能接收器,可以执行以下操作:​

var x = function(){
    var x ={
       a: function() {
           alert("hello");
       } 
    };
    x.b = function() {
        mayhem(x.a);
    }
    return x;
}();
另一种方法是创建构造函数并使用
new
操作符生成x


关于您的编辑:

如果要访问main,请执行以下操作:

function StartObj() {
   var events = {
      a: function() {
         alert("hello");
      }
   };

   events.b = function() {
         lightbox(events.a);
   };

   this.main = function() {
      $("#objId").click(events.b);
   }
}

你把你的
StartObj
构造函数搞砸了-它不会返回带有
main
方法的对象,
main
只是一个局部函数。另外,在赋值
events.b
之后,右大括号太多了。这应该起作用:

function StartObj() {
   var events = {
        a: function() {
            alert("hello");
        },
        b: function() {
            lightbox(events.a);
        }
    };

    this.main = function main() {
        $("#objId").click(events.b);
    }   
}

另外,确保lightbox确实是全球可用的-检查错误控制台。

您已经搞糟了
StartObj
构造函数-它不会返回带有
main
方法的对象,
main
只是一个本地函数。另外,在赋值
events.b
之后,右大括号太多了。这应该起作用:

function StartObj() {
   var events = {
        a: function() {
            alert("hello");
        },
        b: function() {
            lightbox(events.a);
        }
    };

    this.main = function main() {
        $("#objId").click(events.b);
    }   
}

另外,请确保lightbox在全球范围内可用-检查您的错误控制台。

您如何调用它?这些只是定义。(我认为您的问题可能在于
这个
b
函数中的含义。)您如何调用它?这些只是定义。(我认为您的问题可能在于
这个
b
函数中的含义。)您能回顾一下我的问题吗?请参见编辑。但是你想提醒什么呢?函数代码或只是“hello”?实际上,我在函数中传递的参数是一个回调函数,当lightbox自身初始化时将调用该函数。我只是用一个函数存根进行检查。@dystroy:您最后一个原型代码不起作用,因为
events
是原型的本地代码constructor@Bergi右:复制粘贴太多。。。由于它还不够混乱,可能不相关,我删除了原型版本…你能回顾一下我的问题吗?参见编辑。但是你想提醒什么呢?函数代码或只是“hello”?实际上,我在函数中传递的参数是一个回调函数,当lightbox自身初始化时将调用该函数。我只是用一个函数存根进行检查。@dystroy:您最后一个原型代码不起作用,因为
events
是原型的本地代码constructor@Bergi右:复制粘贴太多。。。由于它还不够混乱,可能不相关,我删除了原型版本…我不会马上给x.b打电话。我在初始化一个对象,然后打电话给x.b,我不是马上打电话给x.b。我正在初始化一个对象,然后打电话。谢谢你的回复,伙计。我把右括号放好了。但是粘贴到这里时,我弄错了。嘿。谢谢你的回复,伙计。我把右括号放好了。但是当粘贴到这里时,我犯了一个错误