我希望这可以在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');
将输出
“说嗨”
提前致谢。
答案 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}