【发布时间】:2011-06-06 23:26:00
【问题描述】:
基本上,我正在寻找在使用 javascript 原型方法时将方法附加到可执行函数的能力。下面的代码演示了我正在谈论的内容和我正在寻找的功能,但它确实是一个 hack。请注意,我有一个有效的 this 对象来附加变量以及 main 和 init 函数。
function create(){
var $this = {},
main = function(){
prototype.main.apply($this,arguments);
};
prototype.init.apply($this,arguments);
//Add additional prototype methods by brute force, ugly
for(i in prototype)-function(i){
main[i]=function(){
prototype[i].apply($this,arguments);
}
}(i);
return main;
};
var prototype = {
//called when you create the object
init:function(text){
console.log('init');
this.text = text;
},
//called when you call the object
main:function(){
console.log('main');
console.log(this);
},
method:function(){
console.log(this.text);
}
};
//create returns a function that also has methods
//the below line will call the init method
var fun = create('some variables');
//call main function
fun();
//call methods
fun.method();
恐怕我会遗漏一些明显的东西。
这里的功能与上面相同,但扩展了全局函数原型。
扩展全局属性是不好的做法,所以我正在寻找替代解决方案。
Function.prototype = {
//called when you create the object
init:function(text){
console.log('init');
this.text = text;
},
//called when you call the object
main:function(){
console.log('main');
console.log(this);
},
method:function(){
console.log(this.text);
}
};
function create(){
var ret = function(){
ret.main.call(main);
};
ret.init.apply(main,arguments);
return ret;
};
//create returns a function that also has methods
//the below line will call the init method
var fun = create('some variables');
//call main function
//fun();
//call methods
fun.method();
很明显,您似乎不能使用典型的新对象方法,因为如果您调用 new 则无法返回单独的值。
任何解释或考虑都会很棒!
【问题讨论】:
标签: javascript function-prototypes