在飞行中添加方法到对象

时间:2012-04-19 22:07:26

标签: javascript

我希望这可以在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将Method作为新方法传递,我可以这样做:

MYOBJECT.otherMethod('say Hi');

将输出

  

“说嗨”

提前致谢。

5 个答案:

答案 0 :(得分:3)

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

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

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

然后执行:

yourObject.yourMethodName(methodParam1, methodParam2);

希望这有帮助。

答案 1 :(得分:2)

就像其他人所说的那样,只需传入一个匿名函数作为addMethodToObject函数的参数。

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

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

MYOBJECT.newMethod();

答案 2 :(得分:1)

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

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

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

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

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是要添加的属性的字符串名称。

答案 3 :(得分:1)

试试这个:

function test() {

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

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

}

见ya;)

答案 4 :(得分:1)

简单你可以添加一个新方法,比如你添加一个新属性

obj["MethodName"] = function(){//ur Javascript statements}