i have class, has 2 methods: get()
, set()
.
function a() { var value = ''; this.get = function () { return value; }; this.set = function (v) { value = v; }; }
and have function f()
:
/** * * @param { string | number } b */ function f(b){ var value; if(b instanceof a){ value = b.get(); }else{ value = b; } }
i create object:
var test = new a(); test.set('hello'); f(test); //hello f(10); //10
the instanceof
operator tests whether object has in prototype chain prototype property of constructor. heard bad practice use operator. question is: imposible rid of instanceof
operator code? maybe should use force type conversion or use getter, setter?
<--update-->>
i found simple solution, coerce b.get
boolean type , check it. works, maybe has incidental effect.
value = (!!b.get) ? b.get(): b;
<--update 2-->>
another way: value = (b.constructor = a) ? b.get(): b;
it's not instanceof
operator problem, it's you're using for. function expecting values of 2 different types: either instance of a
needs handled way or else can used is.
the problem a) why function allowing 2 different types begin , couldn't harmonise 1 type, , b) if it's accepting "anything" or "a
", why a
, not more general?
assuming cannot reasonably change point a), can @ least make b) better:
if (typeof b.get == 'function') { value = b.get(); }
you've made function little more flexible , adaptable future change testing actual thing you're interested in: get
method. b
instanceof a
sort of irrelevant task @ hand , may limit in future.
Comments
Post a Comment