【问题标题】:How to call function from object如何从对象调用函数
【发布时间】:2023-03-03 12:13:02
【问题描述】:

我尝试从对象 Foo 调用函数,但它不起作用。

function Foo(){
    function bar(){
        alert("Hello!");
    }   
}

var a = new Foo();
a.bar();

【问题讨论】:

  • 正如您所声明的那样,bar() 是一个本地函数,只能在 Foo() 函数内部使用。
  • 这样一个基本的问题不应该问,因为你可以在网上找到这么多的教程。

标签: javascript function object


【解决方案1】:

你应该将函数设置为对象的属性

function Foo(){
    this.bar = function (){
        alert("Hello!");
    };
}

var a = new Foo();
a.bar();

或者在对象创建之前使用原型定义

function Foo(){}

Foo.prototype.bar = function (){
    alert("Hello!");
};

var a = new Foo();
a.bar();

【讨论】:

    【解决方案2】:

    除了@user3896501的回答,

    function Foo() {
      // You can define all private variables/ functions.
      function bar(callBar1) {
        alert("Hello!");
    
        if (callBar1)
          bar1();
      }
    
      // This is a private function and can be called only from inside.
      function bar1() {
        alert("Hello!!!");
      }
    
      // Return only those variables/ functions which needs to be made public
      return {
        bar: bar
      }
    }
    
    var a = new Foo();
    a.bar();
    
    // Trying to access private function should throw exception
    try {
      a.bar1();
    } catch (e) {
      console.log(e)
    }
    
    // Accessing private function using parameter
    a.bar(true);

    【讨论】:

      【解决方案3】:
      function Foo()
      {
          // ...
      }
      
      Foo.prototype.bar = function ()
      {
          alert("I called bar on a Foo object");
      };
      
      var a = new Foo();
      a.bar();
      

      【讨论】:

        【解决方案4】:
         function Foo(){
            function bar(){
               alert("Hello!");
              }   
           return {
              bar : bar
           }
        }
        
        var a = new Foo();
        a.bar();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-04
          • 2010-10-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多