如何在JavaScript对象中调用函数?

时间:2017-11-21 21:51:59

标签: javascript jquery

我试图调用bar内的foo功能,但我似乎无法弄明白该怎么做。我错过了什么或者我不理解什么?



var foo = function() {
  function bar() {
    alert('bar');
  }
};

$.fn.mainfoo = function() {
  alert('mainfoo');

  return this.each(function(key, value) {
    if ($(this).data('mainfoo')) return $(this).data('mainfoo');
    var mainfoo = new foo();
    $(this).data('mainfoo', mainfoo);
  });
};

var myfoo = $('body').mainfoo();
try {
  myfoo.data('mainfoo').bar();
} catch (e) {
  alert(e);
}




3 个答案:

答案 0 :(得分:3)

更改bar,使其成为foo的属性:



var foo = function(){
  this.bar = function() {
  	alert('bar');
  }
};

$.fn.mainfoo = function() {
	  alert('mainfoo');

		return this.each(function(key, value){
      if ($(this).data('mainfoo')) return $(this).data('mainfoo');			
			var mainfoo = new foo();
      $(this).data('mainfoo', mainfoo);
		});    
};

var myfoo = $('body').mainfoo();
myfoo.data('mainfoo').bar();

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

你有一点疏忽,内心如何访问foo里面的bar方法。所以你需要从foo返回任何内容,将是一个对象和内部bar方法。 这是一个demo,很少有你的感动:

var foo = function(){
    return {
    bar: function() {
    alert('bar');
    }
  }
};

$.fn.mainfoo = function() {
      console.log('mainfoo');

        return this.each(function(key, value){

      if ($(this).data('mainfoo')) return $(this).data('mainfoo');

            var mainfoo = new foo();

      $(this).data('mainfoo', mainfoo);

        });    
};

var myfoo = $('body').mainfoo();
try{
    myfoo.data('mainfoo').bar();
}catch(e){
    console.log(e);
}

答案 2 :(得分:0)

两种方式

var foo = function(){
    return {
        bar: function(){ alert('bar')}
    };
};
jQuery.fn.mainfoo = function() {
    ///
    var mainfoo = foo();
    ///
};

其他方式

var foo = function(){
    this.bar = function() {
        alert('bar');
    }
};
$.fn.mainfoo = function() {
    var mainfoo = new foo();  
};