javascript - 是否可以从javascript Function 对象继承?

标签 javascript function inheritance object invoke

是否可以在 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/

相关文章:

php - 如何在 PHP 生成的脚本中调用 javascript 函数?

javascript - 设置 Javascript 函数的范围问题

java - 当父类似乎没有更改任何属性时,两次声明方法的目的是什么(有吗?)?

javascript - 在 Cordova 应用程序中捏合以缩放/缩放 iframe

javascript - 在 <p> 标签中创建文本取决于 <select> 标签,javascript

javascript - aframe - 如何强制最大/最小相机倾斜

inheritance - 类方法中的“super”关键字

javascript - 滚动时粘性标题不保持宽度

c - 按值传递数组

c++ - 使用基类对象访问派生类专用方法