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 では、プロパティにアクセスする方法が2 つあります。リテラル名を使用するドット表記と、文字列を使用する括弧付き表記です。例は、それを示す最も明確な方法です。

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 に答える