Javascript bind如何处理new和instanceof?

Javascript bind如何处理new和instanceof?,javascript,bind,new-operator,instanceof,Javascript,Bind,New Operator,Instanceof,昨天我接受了一次采访,有一项任务是编写JavaScript类,该类可以使用多个新对象创建,并且创建的对象必须是其所有父对象的实例。我试着用Function.bind来做,但没有成功 函数JSObject{ 返回JSObject.bindnull; } var obj1=新的JSObject; var obj2=新obj1; var obj3=新obj2; console.logobj2 obj1的实例;//打印为假,预期为真 console.logobj3 obj2实例;//打印为假,预期为真

昨天我接受了一次采访,有一项任务是编写JavaScript类,该类可以使用多个新对象创建,并且创建的对象必须是其所有父对象的实例。我试着用Function.bind来做,但没有成功

函数JSObject{ 返回JSObject.bindnull; } var obj1=新的JSObject; var obj2=新obj1; var obj3=新obj2; console.logobj2 obj1的实例;//打印为假,预期为真 console.logobj3 obj2实例;//打印为假,预期为真 console.logobj3 obj1的实例;//打印为假,预期为真 console.logobj1 obj2实例;//打印错误,预期错误 console.logobj1 instanceof obj3;//打印错误,预期错误 让objects=[JSObject,newjsobject]; 对于let i=0;i<10;i++{ objects.pushnew对象[objects.length-1]; } 对象的let-obj{ const objProt=Object.getPrototypeObj; const objProtProt=Object.getPrototypeOfobj.prototype; const funcProt=Object.getPrototypeOfFunction; const funcproproprot=Object.getPrototypeOfFunction.prototype; console.logobjProt==funcProt;//应为true console.logobjprot===funcprot;//应为true
} 这实际上不是一个类,因为您无法区分构造函数和实例。每个构造函数只创建本身就是子类的新对象

function inherit(parent) {
    function object() {
        return Object.setPrototypeOf(inherit(object), object.prototype);
    }
    object.prototype = Object.create(parent.prototype);
    return object;
}
var JSObject = inherit(Function);
或使用ES6:

function inherit(parent) {
    return class object extends parent {
        constructor() {
            return Object.setPrototypeOf(inherit(object), new.target.prototype);
        }
    }
}
const JsObject = inherit(Function);

当然,它们甚至实现了obj instanceof函数和obj.prototype instanceof函数和instanceof对象。无法实现Object.getPrototypeOfobj==Function.prototype和Object.getPrototypeOfobj.prototype==Object.prototype的附加要求。假设我们不使用欺骗测试的有状态代理。

不确定这里的目标到底是什么。您的构造函数总是只返回一个新函数,它本身不是构造函数。它是绑定返回的中间函数,不是JSObject,尽管调用时它将返回一个新实例,因此它永远不会是任何对象的实例。在consturcutor中返回此值或什么都不返回,以便获得继承。您还必须返回一个对象,但这是非this返回的第二个…@dandavis如果您返回这个,当您尝试调用新的obj1;,您将如何使用它作为构造函数@MarkMeyer:因为只有对象可能正式来自构造函数,所以您不能从构造函数返回构造函数,您必须使用工厂模式。@dandavis是的,所以返回这个不会解决OP的问题。