You have to pass the adds object (or other fields) as an argument to f, or capture the fields in a closure via something like (x, i) -> x + v[i] in the constructor.
struct Adder
adds::Vector{Float64}
f::Function
function Adder(v::AbstractVector)
a = Vector{Float64}(v) # perform type conversion if needed
new(a, (x, i) -> x + a[i])
end
end
However, it sounds like you are trying to emulate object-oriented-programming (OOP) syntax in Julia. This will result in non-idiomatic code and poor performance, so as a general rule I would avoid this style. In particular, instead of object.func(args...) syntax as in OOP, in Julia you might do func(object, args...), and define a method of func that takes an parameter of your object type as the first argument.
Because your struct has an abstractly typed field (::Function). So for every call to f the compiler has to figure out the return type at runtime, it can’t inline it, etc. etc.