动态添加方法到对象

Adding Methods on the Fly to Object

本文关键字:对象 方法 添加 动态      更新时间:2023-09-26

我希望这可以在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');

将输出

"打个招呼"

提前谢谢。

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

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

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

然后执行如下:

yourObject.yourMethodName(methodParam1, methodParam2);

希望这有帮助。

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

var MYOBJECT = {
    method1: function(){ ; },
    addMethodToObject: function (methodName, method) {
        this[methodName] = method;
    }
};
MYOBJECT.addMethodToObject("newMethod", function () {
    console.log("testing 123");
});
MYOBJECT.newMethod();

试试这个:

function test() {
  myObj = {
    addMethod: function( method, name ) {
      this[name] = method;
    }
  }
  myObj.addMethod( function() { alert( "foo" ) }, "fooMethod" );
  myObj.fooMethod();
}

见你;)

很简单,

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

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

您可以定义一个函数来执行此操作。但是,您不需要直接分配给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 是要添加的属性的字符串名称。