【问题标题】:JavaScript Function within Function函数内的 JavaScript 函数
【发布时间】:2014-03-22 05:25:51
【问题描述】:

我想知道是否可以执行以下操作:

worker.name("John").salary(100)

基本上,这会将工人(约翰)的工资更改为 100。

有没有办法在函数中定义函数?

你能告诉我方法并解释一下吗?

【问题讨论】:

  • Ans : 是的..有可能
  • @Pilot 能告诉我方法并解释一下吗?
  • 那不是函数中的函数。只需返回一些你可以调用下一个方法的东西。方法链。
  • 再次使用嵌套方法返回方法定义对象工作者

标签: javascript function


【解决方案1】:

这通常称为链接。本质上,每个方法都返回父对象:

var worker = {
    name: function ( name ) {
        this._name = name;
        return this;
    },
    salary: function ( salary ) {
        this._salary = salary;
        return this;
    }
};

worker.name("Jonathan").salary("$1");

alert( worker._name );
alert( worker._salary );

您会注意到每个方法都返回对象。这在以下屏幕截图中非常清楚。如果我们控制台输出调用name方法的结果,我们看到返回了整个worker对象:

【讨论】:

  • 直到现在我才知道这是可能的。
【解决方案2】:

创建一个构造函数,如:

var Worker = function(){
};

Worker.prototype.name = function (name){
  this.name = name;
  return this;
};

Worker.prototype.salary = function (salary){
  this.salary = salary;
  return this;
}

现在上面的构造函数可以用作:

var worker = new Worker();
worker.name("John Doe").salary(100);

【讨论】:

  • 你能用“Worker().name(“JOHN”).salary(100)”吗?
  • 不,这是不可能的,因为我使用了构造函数模式。为此,您可以查看@Jonathan Sampson 解决方案。
【解决方案3】:

这是可能的:

var worker = {
  nameVar: null,
  salaryVar: null,
  name: function(name) {
    this.nameVar = name;
    return this;
  },
  salary: function(salary) {
    this.salaryVar = salary;
    return this;
  }
}

每个方法都会修改对象,返回this,也就是对象。然后您可以调用另一个方法,就像在您的示例中一样,而无需显式编写对象名称。

或者,您可以实现.clone 方法,而不是this,返回具有修改属性的克隆。这有点类似于jQuery 的工作方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    相关资源
    最近更新 更多