如何在调用对象之前立即调用函数

时间:2019-07-14 05:25:28

标签: javascript

是否有可能在第二个对象被调用时调用一个函数?

我有以下对象:

var z;
var a = {
    b: function(){
      return z * 2;
     }
    c: function(){
      return z * 3;
     }
    d: function(){
      return z * 4;
     },
    e: function(){
      return z * 5;
     }
}

var onObjectInvoke = function(){
  z = (new Date()).getTime();
}

我想在调用z之前重置a.d()的值,这就是我在调用a.d()时的流程:

  1. onObjectInvoke

  2. 致电a.d();

我正在寻找某种构造函数,有什么办法吗?

4 个答案:

答案 0 :(得分:1)

为什么您不能在致电onObjectInvoke()之前先致电a.d()?如果您允许函数为无状态并在给定的参数上运行,而不是使用全局z变量,那么您的生活将会轻松很多。

var z;
var a = {
    d: function(x){
        return x * 4;
    }
}

var onObjectInvoke = function(){
  return (new Date()).getTime();
}

z = a.d(onObjectInvoke());

答案 1 :(得分:0)

import numpy as np
def firstAndLast(first,last):
    return np.intersect1d(first, last)

first = input("Enter first name: ")
last = input("Enter last name: ")
first, last = [*first], [*last]

firstAndLast(first, last)

答案 2 :(得分:0)

一种简单的方法是再添加一层,然后首先访问该层中的onObjectInvoke(),然后将该层的函数作为对象返回,并在返回值上调用所需的函数

  a.defaultFunc().d()

var z;
var a = {
  defaultFunc: function() {
    onObjectInvoke()
    return {
      b: function() {
        return z * 2;
      },
      c: function() {
        return z * 3;
      },
      d: function() {
        return z * 4;
      },
      e: function() {
        return z * 5;
      }
    }
  }
}
var onObjectInvoke = function() {
  console.log('reseting z')
  z = (new Date()).getTime();
}

console.log(a.defaultFunc().d())
console.log(a.defaultFunc().e())

答案 3 :(得分:0)

在这种情况下,您肯定不希望直接使用z,而是调用一个为您返回值的函数。在该函数中,您将重置z或根据当前用例将其返回。

在可维护性和可读性方面,拥有严重修改功能行为/结果的外部代码始终是一个坏主意。

var z;
var resetZ = true;

var a = {
  getZ: function() {
    if (resetZ) {
      z = (new Date()).getTime();
    }
    return z;
  },
  b: function() {
    return this.getZ() * 2;
  }
  c: function() {
    return this.getZ() * 3;
  }
  d: function() {
    return this.getZ() * 4;
  },
  e: function() {
    return this.getZ() * 5;
  }
}

a.d()

您肯定不应该使用全局resetZ,但是由于不清楚如何正确使用代码,因此也不清楚如何构造代码。也许getZ应该是自由函数,而不是属于对象的函数。