如何使用call或apply调用JavaScript构造函数?
如何使用call或apply调用JavaScript构造函数?
如何将下面的函数泛化为接受N个参数?(使用call或apply?)
是否有一种编程方式将参数应用于“new”?我不希望将构造函数视为普通函数。
/** * 这个高级函数接受一个构造函数和参数,并返回一个函数,当调用时将返回惰性构造的值。 * * 除了第一个参数外,所有的参数都将传递给构造函数。 * * @param {Function} constructor */ function conthunktor(Constructor) { var args = Array.prototype.slice.call(arguments, 1); return function() { console.log(args); if (args.length === 0) { return new Constructor(); } if (args.length === 1) { return new Constructor(args[0]); } if (args.length === 2) { return new Constructor(args[0], args[1]); } if (args.length === 3) { return new Constructor(args[0], args[1], args[2]); } throw("参数过多"); } }
qUnit测试:
test("conthunktorTest", function() { function MyConstructor(arg0, arg1) { this.arg0 = arg0; this.arg1 = arg1; } MyConstructor.prototype.toString = function() { return this.arg0 + " " + this.arg1; } var thunk = conthunktor(MyConstructor, "hello", "world"); var my_object = thunk(); deepEqual(my_object.toString(), "hello world"); });