是否有可能在第二个对象被调用时调用一个函数?
我有以下对象:
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()
时的流程:
打onObjectInvoke
。
致电a.d()
;
我正在寻找某种构造函数,有什么办法吗?
答案 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
应该是自由函数,而不是属于对象的函数。