JavaScript构造函数可以返回函数并保持继承吗?

Six*_*ase 14 javascript oop constructor function prototypal-inheritance

function F() {
    return function() {
        return {};
    }
}

var f = new F();
f instanceof F; // returns false
Run Code Online (Sandbox Code Playgroud)

据我所知,如果我想instanceof工作,我需要this从构造函数返回.但我希望构造函数返回一个函数,我无法分配给this.

那么,这真的是不可能的,还是可以以某种方式完成,f = new F()以便返回一个函数并仍然f instanceof F返回true?

Esa*_*ija 8

function F() {
    var r = function() {
        return {};
    };

    r.__proto__ = this.__proto__;
    return r;
}

var f = new F();
f instanceof F;
true
f();
Object
Run Code Online (Sandbox Code Playgroud)

仅适用于浏览器 __proto__


Nei*_*eil 5

你当然可以instanceof F通过设置使所有功能都显示出来F.prototype = Function.prototype;.

不幸的是,看起来ECMAScript不允许您创建函数子类.

但是,您可以使用不推荐使用的__proto__属性在Gecko中执行此操作:

function F() {
    function f() {
        return {};
    }
    f.__proto__ = F.prototype;
    return f;
 }
 F.prototype.__proto__ = F.__proto__;
Run Code Online (Sandbox Code Playgroud)