Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Function (callable) objects with inherited properties

Tags:

javascript

Is there any way to create a function/callable object that inherits properties from another object? This is possible with __proto__ but that property is deprecated/non-standard. Is there a standards compliant way to do this?

/* A constructor for the object that will host the inheritable properties */
var CallablePrototype = function () {};
CallablePrototype.prototype = Function.prototype;

var callablePrototype = new CallablePrototype;

callablePrototype.hello = function () {
   console.log("hello world");
};

/* Our callable "object" */
var callableObject = function () {
   console.log("object called");
};

callableObject.__proto__ = callablePrototype;

callableObject(); // "object called"
callableObject.hello(); // "hello world"
callableObject.hasOwnProperty("hello") // false
like image 349
Cristian Sanchez Avatar asked Jul 20 '26 20:07

Cristian Sanchez


1 Answers

This doesn't seem to be possible in a standard way.

Are you sure you can't just use plain copying instead?

function hello(){
    console.log("Hello, I am ", this.x);
}

id = 0;
function make_f(){
     function f(){
          console.log("Object called");
     }
     f.x = id++;
     f.hello = hello;
     return f;
}

f = make_f(17);
f();
f.hello();

g = make_f(17);
g();
g.hello();

(If I had to do this I would also hide id, hello and similar stuff inside a closure instead of using globals)

like image 139
hugomg Avatar answered Jul 22 '26 09:07

hugomg