0

我希望这可以在 Javascript 中完成。

我有这样的事情:

有这样的东西:

var MYOBJECT = {
method1: function(){//some cool},
addMethodToObject: function (a_new_method){
//whats need to be here to add the
 method passed in "a_new_method" to MYOBJECT ?
}

}

这个想法是调用:

MYOBJECT.addMethodToObject(function otherMethod(needThis){return needThis;});

现在 MYOBJECT 将方法作为新方法传递,我可以这样做:

MYOBJECT.otherMethod('say Hi');

将输出

“打招呼”

提前致谢。

4

5 回答 5

3

我没有测试上面的答案,但他们都需要从内部更改对象。我需要一些东西而不从内部改变对象,所以我想出了这个解决方案:

首先创建对象的实例,然后:

yourObject.yourMethodName = function(methodParam1, methodParam2) {
    doWhatYouNeed;
};

然后执行为:

yourObject.yourMethodName(methodParam1, methodParam2);

希望这可以帮助。

于 2012-10-09T23:56:25.640 回答
2

就像其他人所说的那样,只需将匿名函数作为参数传递给您的 addMethodToObject 函数。

var MYOBJECT = {
    method1: function(){ ; },
    addMethodToObject: function (methodName, method) {
        this[methodName] = method;
    }
};

MYOBJECT.addMethodToObject("newMethod", function () {
    console.log("testing 123");
});

MYOBJECT.newMethod();
于 2012-04-19T22:22:41.627 回答
1

您可以定义一个函数来执行此操作。但是,您不需要MYOBJECT直接分配给:

MYOBJECT.otherMethod = otherMethod;
function otherMethod(needThis){
    return needThis;
}

函数是 JavaScript 中的一等对象,您可以像传递任何其他对象一样传递对它们的引用。您可以随时在 JavaScript 对象上创建新属性,只需为属性赋值即可。

如果你想为它定义一个函数,该函数必须同时接受函数你希望它在对象上具有的名称,如下所示,如下所示:

var MYOBJECT = {
    // ...
    addMethodToObject: function(name, func) {
        this[name] = func;
    }
};

这是因为属性和函数没有理由必须具有相同的名称,并且没有标准的方法可以从函数实例中获取函数的名称。(有几种非标准方式,但标准没有定义。)

我在那里使用的语法可能不熟悉。在 JavaScript 中,有两种访问属性的方法:带有文字名称的点表示法和带有字符串的括号表示法。示例是演示它的最清晰方法:

var obj = {};
obj.foo = 42;    // Dotted notation with a literal name `foo`
obj["foo"] = 42; // Exactly the same thing, using bracketed notation and a string
var s = "foo";
obj[s] = 42;     // Again the same, because the string doesn't have to be a literal

...这就是为什么this[name] = func;有效;name是要添加的属性的字符串名称。

于 2012-04-19T22:15:57.667 回答
1

试试这个:

function test() {

  myObj = {
    addMethod: function( method, name ) {
      this[name] = method;
    }
  }

  myObj.addMethod( function() { alert( "foo" ) }, "fooMethod" );
  myObj.fooMethod();

}

拜拜 ;)

于 2012-04-19T22:16:52.747 回答
1

简单你可以像你添加一个新属性一样添加一个新方法

obj["MethodName"] = function(){//ur Javascript statements}
于 2012-04-19T22:17:56.213 回答