if prototype of every function created in javascript is a function like the above, then where exactly methods like call(), apply() and bind() defined?
Exactly on that function / pobject. Function.prototype is a function, but it is not like any other. It's defined §8.2.2 CreateIntrinsics:
8. Let noSteps be an empty sequence of algorithm steps.
9. Let funcProto be CreateBuiltinFunction(realmRec, noSteps, objProto).
10. Set intrinsics.[[%FunctionPrototype%]] to funcProto.
It is a built-in function, but its own prototype is set to the default object prototype (objProto) here, not to itself (you cannot have circular prototype chains).
Step 13 in that algorithm then goes and says that all intrinsic values need to be recursively initialized according to some people and certain sections in the spec:
Set fields of intrinsics with the values listed in Table 7 that have not already been handled above. The field names are the names listed in column one of the table. The value of each field is a new object value fully and recursively populated with property values as defined by the specification of each object in clauses 18-26. [...]
The table contains:
%FunctionPrototype% | Function.prototype | The initial value of the prototype data property of %Function%
and §19.2.3 describes all the properties of that object, including the ones you mentioned.
Functionprototype__proto__is being represented in the console log.__proto__itself has other properties, includingcallandapply.console.dir(a.__proto__)