0

それはNumber関数の新しいバージョンを作成し、それを別の何かと呼んでいますか?これを書くためのより良い方法はありますか?

Number.prototype.clamp = function(min, max) {
  return Math.min(Math.max(this, min), max);
};

と同じですか

Number.prototype.NumberToMystring = function(n) {
  return n.toSTring();
};

次に、NumberToMystring(5)は「5」を返しますが、文字列として

4

2 に答える 2

1

NumberToMystringはクランプと同じではありません。

クランプの目的は異なり、NumberToMystringも同様です。クランプは、数値が範囲内にあることを保証しますが、後者は変換演算子です。

クランプの使い方は

var x = (5).clamp(0, 255); return 5


Number.prototype.clamp = function(min, max) {
  return Math.min(Math.max(this, min), max);
};

このプロトタイプを見たら。このオブジェクトはreturnステートメントに含まれます。これは、あなたがクランプと呼んだ番号に他なりません。私たちの場合は5です。

このように発生する理由を理解するには、実行コンテキスト、スコープから始まり、プロトタイプにアクセスするまでの多くの概念を理解する必要があります。

このようにクランプ機能を変更して、何が返されるかを確認してください。これは、JSフィドルコードが機能しない理由を理解するのに役立ちます。

Number.prototype.newclamp = function(min, max) {
  return this;
};

これにより、Numberオブジェクトが返されます。この呼び出し中にスコープチェーンを分析すると、スコープに5が含まれているため、操作が実行されると5が返されます。

var y = 5;
var z;

z = y.newclamp();
z.toString() // return 5;


Number.prototype.NumberToMystring = function(n) {
  return n.toSTring();
};

この特定のプロトタイプでは、プロトタイプを呼び出すときに渡される引数のみを使用しています。そのため、NumberToMystring(5)は、引数として5をとって「5」を返します。

プロトタイプを理解するために、スコープチェーンと実行コンテキストはこのサイトを参照してください。 http://dmitrysoshnikov.com/ecmascript/chapter-3-this/

于 2013-03-26T07:49:33.330 に答える
0

JavaScriptのすべてのオブジェクトは、オブジェクトオブジェクトの子孫です。すべてのオブジェクト
は、Object.prototype Object.prototypeからメソッドとプロパティを継承しますが、オーバーライドされる場合があります(nullプロトタイプを持つObject、つまりObject.create(null)を除く)。たとえば、他の
コンストラクターのプロトタイプはコンストラクタープロパティをオーバーライドし、独自のtoString
メソッドを提供します。オブジェクトプロトタイプオブジェクトへの変更は、それらの変更の対象となるプロパティとメソッドがプロトタイプチェーンに沿ってさらにオーバーライドされない限り、すべてのオブジェクトに伝播されます。

こちらをご覧ください

于 2013-03-26T07:54:09.227 に答える