【问题标题】:How can i set an object under another by constructor如何通过构造函数在另一个对象下设置一个对象
【发布时间】:2015-10-29 23:05:40
【问题描述】:

我有一个简单的构造函数

function foo() {
    this.bar = function() {
         return "fubar";
    }
}

当我打电话给new foo().bar();时,这里没问题

如果我想做这样的事情

function foo() {
    this.bar = function() {
         function subbar() {
            return "subbar";
         };
    }
}

我已经尝试了以下版本,但它们都不起作用。

function foo() {
    this.bar = function() {
         this.bar.subbar() {
            return "subbar";
         };
    }

}

function foo() {
    this.bar = function() {
         this.bar.prototype.subbar() {
            return "subbar";
         };
    }
}

我怎样才能到达像new foo().bar().subbar()这样的子栏

【问题讨论】:

  • 您期望发生什么?最后两个是无效的语法。
  • 我希望在许多本机函数中达到像 nerw foo().bar().subbar() 这样的子栏
  • 两个答案都是正确的你必须在返回中暴露它,我建议你看看JS中的模块模式:adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html
  • 如果没有关于您想要实现的预期行为的更多信息,将很难回答...
  • 我真的不明白为什么这个问题被低估了

标签: javascript class object inheritance constructor


【解决方案1】:

只返回一个具有最内层函数的对象:

function foo() {
        this.bar = function() {
            return { subbar: function subbar() {
                return "subbar";
             };
        }
    }
}

或者,您可以只返回不带对象的函数:

function foo() {
    this.bar = function() {
        return function subbar() {
            return "subbar";
         };
    }
}

那么你可以这样调用它:this.bar()() 第二组括号调用返回的subbar() 函数

由于函数是对象,所以当你调用bar()时,返回值将是函数subbar()

【讨论】:

    【解决方案2】:

    你想要的是返回一个附加了函数的对象。

    function foo() {
      this.bar = function() {
        return {
          subbar: function() {
            return 'subbar';
          }
        };
      };
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-13
      • 1970-01-01
      相关资源
      最近更新 更多