是否可以在 javascript 中实现我自己的函数?要使用 __invoke 魔术方法拥有像 php 对象这样的 javascript 对象?
A = function(){};
A.prototype = new Function();
var a = new A();
alert( a instanceof Function ); // true
a(); // exception
无法回答我自己的问题...有一个答案:
对不起大家,但我找到了完成任务的好方法(发布问题时我距离答案还有几步之遥)。我不删除问题,希望有人会比我花更少的时间。
A = function()
{
var f = function() { alert( 'f called' ) };
f.__proto__ = A.prototype;
return f;
};
A.prototype = Function( );
A.prototype.method = function() { alert( 'method called' ) };
var a = new A();
alert( a instanceof Function ); // true
alert( a instanceof A ); // true
a(); // f called
a.method(); // method called
如果是新手问题,请给我发邮件,我会删除它。谢谢!
最佳答案
这个怎么样:
function MyFunction ( f ) {
_.extend( f, MyFunction.prototype );
return f;
};
MyFunction.prototype.method = function () {
alert( 'method called' );
};
var func = MyFunction( function () {
alert( 'function called' );
});
现场演示: http://jsfiddle.net/nZczW/
因此,您可以通过将自定义函数传递给自定义函数构造函数来创建自定义函数:
var func = MyFunction( function () {...} );
方法(通常)在构造函数的原型(prototype)上定义:
MyFunction.prototype.foo = function () {...};
在构造函数内部,方法直接分配给函数本身。 (我使用了 underscore.js 的 _.extend()
)。因此,您的函数仍然直接继承自 Function.prototype
。
你当然可以简化这个模式:
var methods = { /* hash of methods */ };
var func = _.extend( function () { ... }, methods );
关于javascript - 是否可以从javascript Function 对象继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9436703/