我正在开发一个具有可以创建项目对象的集合对象的项目。 item对象还创建了特殊的处理程序对象。当用户创建集合对象时,他们可以定义项目对象将生成的默认处理程序对象以及处理程序可以采用的参数。
我发现移动和存储对Object原型的引用以及后续构造函数参数的任务有点混乱。这就是我到目前为止所做的:
function Handler( val ) {
console.log( val );
}
function Collection( handlerArray ) {
this.handler = handlerArray;
}
Collection.prototype.addItem = function() {
new Item( this.handler );
};
function Item( handlerArray ) {
handlerRef = handlerArray.shift();
handlerArgs = handlerArray;
HandlerApply = function( args ) {
return handlerRef.apply( this, args );
};
HandlerApply.prototype = Handler.prototype;
new HandlerApply( handlerArgs );
}
myCollection = new Collection( [
Handler,
'Hello'
] );
myCollection.addItem();
传递对象原型和构造函数参数是否有更优雅的解决方案?
由于
答案 0 :(得分:0)
我发明了一种相当优雅的解决方案。我称之为安装对象的对象。它是一个对象,它引用一个构造函数,然后引用将与该构造函数一起使用的参数。可以存储和传递此对象,然后使用run函数可以实例化存储的对象。
function objectInstaller( ref ) {
this.ref = ref;
this.args = Array.prototype.slice.call( arguments, 1 );
}
objectInstaller.prototype.run = function() {
function Apply( ref, args ) {
return ref.apply( this, args );
}
Apply.prototype = this.ref.prototype;
return( new Apply( this.ref, this.args ) );
};
function MyObject( val ) {
console.log( val );
}
var myInstall = new objectInstaller( MyObject, 'hello' );
var myObject = myInstall.run();