0

メソッドを使用しprototypeて、新しいメソッドを作成できます...

Object.prototype.newMethod=function(){
   // do something
}

newMethodここでは、無名関数を使用してを定義しています...このメソッドを使用する場合は、次のように使用する必要があります。<object>.newMethod();

しかし今、私は次のように使用できる新しいメソッドを作成したいと思います:<object>.newMethod;...角かっこなし...どうすればそれを行うことができますか... ??

jQueryは使用しないでください...

4

3 に答える 3

5

えーと、できません。メソッドを呼び出すには、メソッドの後に括弧を記述します。それ以外の場合は、それを参照しているだけです。

この規則の唯一の例外は、のようなものを書く場合です。ここでは、キーワードが原因で、引数が指定されていないという理由だけでnew Date括弧が暗示されます。new

于 2012-10-17T15:10:40.997 に答える
1

なぜあなたがそれをしたいのか私は本当に理解できませんが、厄介なハッキーな回避策はありますが、それは可能です。あなたが実際に探しているのは、AFAIKであり、魔法のプロパティ(プロパティのようなsomeArray.length)です。

var foo = {val:'foo'};
foo.length = (function(that)
{
    return function()
    {
        return that.val.length;
    }
})(foo);
//at this point foo.length(); returns 3, but still requires parentheses
//so, build another closure, and assign a valueOf method to the lenth method:
foo.length.valueOf = (function(method)
{
    return function()
    {
        return method();//call the length method
    }
})(foo.length);
console.log(foo.length +1);//logs 4
foo.val += 'bar';
console.log(foo.length);//logs 6
//BUT:: be carefull!!
alert(foo.length);//coerces to string, we haven't redefined the toString method, so the function code will be alerted
alert(foo.length + '');//alerts 6

これは、理論的には可能ですが、この種の過度に汚染されたハックを使用しないでください...これは徹底的にテストしていませんが、ATMは、次のことができることにすでに気づいていますconsole.log(foo.length);。別の値を返しますが、理由はわかりませんが、まだ:

foo = {val:'foo'};
foo.length = (function(that){return function(){ return that.val.length;};})(foo);
foo.length.valueOf = (function(method){return function(){return method();};})(foo.length);
foo.length;//returns 3, great
foo.val += 'bar';
console.log(foo.length);//logged 3 at first, now it's back to logging 6!<-- don't trust this is the conclusion
于 2012-10-17T15:43:46.840 に答える
0

括弧なしで関数を呼び出す唯一の方法は、gettersetterを使用して関数を定義することです。

これらはJavaScript1.8の新機能であり、すべてのブラウザでサポートされているわけではないことに注意してください。

于 2012-10-17T15:26:57.730 に答える