1

演算子を使用してネイティブ オブジェクトを拡張してみました。できます。考えられる副作用はありますか?

Number.prototype['+++'] = function(n){
    return this + (2*n);
};

String.prototype['+'] = function(){
    return this += [].slice.call(arguments).join('');
}

alert( 10['+++'](10) ); //=> 30
alert( 'hello '['+']('world ','and ','see you later!') ); 
      //=> hello world and see you later!

このjsfiddleも参照してください

4

3 に答える 3

2

あなたがしていることに副作用があってはなりません。実行していることを「演算子のオーバーロード」とは呼ばないことに注意してください。そうしないと、コードのユーザーは実際に演算子を使用できると考える可能性があります。また、「これにより、コードの記述が本当に簡単になりますか?」と自問することもできます。

于 2011-04-06T19:50:48.620 に答える
1

それが何かにどのように影響するかわかりません。唯一の方法は、タイプミスによるもののように見えます。タイプミスの前に、そのような演算子がないことを開発者に通知します(私は想定しています)が、今ではそれを実行できます。私は経験豊富なJavaScript開発者ではありませんが。

于 2011-04-06T19:50:41.027 に答える
1
alert( 'hello '['+']('world ','and ','see you later!') );

はい、このようなことを行うことには副作用があります。コードが読めなくなります。この計画を思いついたとき、一体何を吸っていたのですか?

また、あなたがしていることはオペレーターとは何の関係もありません。名前がたまたま「+」または「+++」であるオブジェクト プロパティを作成しているだけです。「+」文字は、インタープリターがそれを演算子と見なす場合にのみ演算子です。文字列リテラル内にある場合、それは単なる別の文字です。

于 2011-04-06T20:09:08.993 に答える