开发者

Function (callable) objects with inherited properties

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


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)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜