gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:07:36 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com